はじめまして!qiita初投稿です😆
最近Laravelで開発することが増えてきて、その中でも便利だなーと思った「画像サイズの圧縮」について書きます。
随時間違っている部分などは訂正していくと思います。ご指摘もいただけると嬉しいです🙌
開発環境
PHP 7.3.11
Laravel Framework 6.5.1
Composer version 1.9.1
Laravelで画像処理をする。
今回自分は「interventionImage」というパッケージを利用して、画像サイズを小さくして保存を実装しました。
interventionImageはphpの画像処理ライブラリGD LibraryとImagickをサポートしています。
自分はGD Libraryを使用して実装しました。
GD Libraryのインストール方法は環境によっても変わってくると思うので、お使いの環境に合わせてインストールしてください。
実装までの流れ
interventionImageの公式はこちら
http://image.intervention.io/getting_started/installation#laravel
実装の流れとしては、
1.パッケージのインストール。
2.Laravelで使用できるようにセットアップ。
3.実際に画像サイズを変更してみる。
1.Laravelにintervention/imageをインストールする。
composerを使ってintervention/imageをインストール。
composer require intervention/image
2.セットアップ
InterventionImageをインストールしたら、Laravel構成ファイルconfig/app.php
を開き、providers配列とaliases配列に次の行を追加します。
providers配列に、このパッケージのサービスプロバイダーを追加。
Intervention\Image\ImageServiceProvider::class,
このパッケージのファサードをaliases配列に追加。Imageだとモデルとして定義したクラスと被りそうだったので、InterventionImageとしてaliasを保存。
'InterventionImage' => Intervention\Image\Facades\Image::class,
~前略~
'providers' => [
~中略~
// Add Intervention Image.
Intervention\Image\ImageServiceProvider::class,
],
'aliases' => [
~中略~
'Hash' => Illuminate\Support\Facades\Hash::class,
// Add Intervention Image.
'InterventionImage' => Intervention\Image\Facades\Image::class,
~後略~
3.実際に画像サイズを変更してみる。
今回は画像のアスペクト比をそのままで保存しつつ、横幅を1080pxにしました。
//エイリアスに追加したファサードを呼び出す。
use \InterventionImage;
~中略~
//formからの画像リクエストはimagefileで受け付けしたのでimagefileを設定しています。formに合わせて変更してください。
$file = $request->file('imagefile');
$name = $file->getClientOriginalName();
//アスペクト比を維持、画像サイズを横幅1080pxにして保存する。
InterventionImage::make($file)->resize(1080, null, function ($constraint) {$constraint->aspectRatio();})->save(public_path('/images/' . $filename ) );;
ちなみに、横幅と高さを指定する場合はもう少しシンプルにできます。
InterventionImage::make($file)->resize(1080, 700)->save(public_path('/images/' . $filename ) );;
resize
で画像の大きさを指定するだけだったので、めっちゃ簡単だなーと思いめっちゃ感動しました。
まとめ
少し面倒だと思ってた画像のresizeが、かなりシンプルな書き方で実装できて感動しました😭
とはいえqiitaの初投稿もできたので、これきっかけでqiitaへの投稿を増やして行けたらいいなーと思いました!