Laravel에서 S3로 올라가는 이미지 크기 조정

목적



AWS의 경비 삭감을 위해서 이미지 품질을 보증하는 전제로 S3에 업하는 화상의 압축을 해 주었으면 하는 디렉터로부터의 요망을 실현

요건



[1] 라이브러리 인 GD 설치
$ yum install php-gd

# GD ライブラリの情報を確認
php -r 'print_r(gd_info());'

[2] Intervention Image 설치
$ composer require intervention/image

あるいはcomposer.jsonファイルに下記を追加
"intervention/image": "^2.5",

Laravel 설정



app\config\app.php 파일에 다음을 추가
[1] Intervention Image 서비스 제공자 추가
'providers' => [
        Intervention\Image\ImageServiceProvider::class,
],

[2] Intervention Image의 외관 추가
'aliases' => [
        'Image' => Intervention\Image\Facades\Image::class,
],

컨트롤러 작성


namespace App\Http\Controllers\User;

use Intervention\Image\Facades\Image as Image;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Storage;

class UploaderController extends Controller
{
    public function putImageTmp()
    {
        $file = request()->file('file');

        $image = Image::make($file);
        $image->resize(70, 50);

        $path = request()->file('file')
                ->store(config('const.file_tmp_dir'));

        return response()->success([
            'url' => Storage::url($path),
            'path' => $path,
        ]);
    }

높이만 지정하고 가로는 같은 비율로 리사이즈하고 싶은 경우
        $image->resize(null, 50, function ($constraint) {
            $constraint->aspectRatio();
        });

잠깐 빠진 곳



[1] 라이브러리 인 GD가 설치되어 있지 않으면 다음 오류가 발생합니다.
local.ERROR: Call to undefined function Intervention\Image\Gd\imagecreatefromjpeg() {"userId":11,"exception":"[object] (Error(code: 0): Call to undefined function Intervention\\Image\\Gd\\imagecreatefromjpeg() at /var/www/html/projdir/vendor/intervention/image/src/Intervention/Image/Gd/Decoder.php:38)

[2] GD 라이브러리 정보 확인
$ php -r 'print_r(gd_info());'

Array
(
    [GD Version] => bundled (2.1.0 compatible)
    [FreeType Support] => 1
    [FreeType Linkage] => with freetype
    [GIF Read Support] => 1
    [GIF Create Support] => 1
    [JPEG Support] =>      ←「JPEG Support」が有効になっていない
    [PNG Support] => 1
    [WBMP Support] => 1
    [XPM Support] => 1
    [XBM Support] => 1
    [WebP Support] =>
    [BMP Support] => 1
    [JIS-mapped Japanese Font Support] =>
)

[3] 라이브러리인 GD 설치
$ yum install php-gd

GD 라이브러리 정보 확인
$ php -r 'print_r(gd_info());'

아래와 같이 JPEG Support」가 「1」 유효하게 되면 OK
[GIF Create Support] => 1

이미지 크기 조정 결과



리사이즈 전


리사이즈 후


이미지 리사이즈 이외 다양한 놀 수 있습니다



모자이크
$img->pixelate(50);

그레이 스케일
$img->greyscale();

좋은 웹페이지 즐겨찾기