Laravelでパッケージ「Intervention Image」を使って画像を加工する
Laravelでアプリ構築中に、画像をリサイズしたり、解像度を調整したりなど、画像加工処理を実装したかったのですが、Laravel本体にそのような機能はないようです。
少し調べてみたのですが、Laravelでは「Intervention Image」というパッケージとの相性がよさそうです。
Intervention Image – Introduction
今回はLaravel 5.8にパッケージ「Intervention Image」を組み込んでみます。
目次
パッケージ「Intervention Image」をインストール
それでは早速パッケージ「Intervention Image」をインストールします。Laravelなので以下のようにcomposerで簡単にインストールできます。
> composer require intervention/image
パッケージのダウンロードに成功したら、以下のようにサービスプロバイダの設定「config/app.php」に追加してLaravelに組み込みます。
'providers' => [ ... Intervention\Image\ImageServiceProvider::class, ], ... 'aliases' => [ ... 'InterventionImage' => Intervention\Image\Facades\Image::class, ],
最後に設定のキャッシュをクリアします。
> php artisan config:clear
「Intervention Image」を使ってみる
それでは実際に「Intervention Image」を使ってみます。
コントローラ内で使用する場合、先ほど設定したエイリアスを指定して読み込みます。
use InterventionImage;
それぞれ画像名を含めたフルパスで、編集前の画像を「$image_from」、編集後の画像を「$image_to」とした場合、以下のようにして画像をリサイズすることができます。
InterventionImage::make($image_from) ->resize(300, 300) ->save($image_to);
縦横比を維持しながらリサイズする
上の例では、元の画像サイズに関係なく300×300にリサイズするので、縦横比を維持せずに縦または横につぶれたような画像になってしまいます。
そこで、以下のようにすることで縦横比を保持した状態でリサイズすることができます。
InterventionImage::make($image_from) ->resize(300, 300, function ($constraint) { $constraint->aspectRatio(); }) ->save($image_to);
ちなみ元画像が欠けることなくリサイズするので、足りない部分は余白で埋められます。
トリミングする
以下のようにすれば、指定したサイズでトリミングすることができます。
InterventionImage::make($image_from) ->crop(300, 300) ->save($image_to);
上記は画像の中心をトリミングしますが、例えば以下のように起点座標を指定すれば左上を端にトリミングすることができます。
InterventionImage::make($image_from) ->crop(300, 300, 0, 0) ->save($image_to);
リサイズしてはみ出した部分を切り捨てる
先ほどのリサイズ「resize」では指定サイズに収まるようにリサイズするだけなので、足りない部分に余白が発生してしまいます。
「fit」を使えば、指定サイズをカバーするようにリサイズし、指定サイズからはみ出した部分は切り捨てることで、ぴったり最適なサイズの画像が作成できます。
InterventionImage::make($image_from) ->fit(300, 300) ->save($image_to);
最も使うのはこちらじゃないでしょうか。
他にもいろいろできそうで便利ですね。
コメントする