はじめに
Laravel はImage ファサードを通じて、流暢な画像加工 API を提供します。リサイズ・クロップ・エンコード・保存などの操作をフレームワーク全体で一貫した表現方法で記述できます。
内部的には Intervention Image を利用しており、PHP の GD 拡張と Imagick 拡張の両方をサポートしています。
この機能は Laravel v13.20.0 以上 で利用できます。古いバージョンを使用している場合は
composer update でフレームワークを最新版に更新してください。インストール
画像加工機能を使用する前に、Composer で Intervention Image パッケージをインストールします。設定
設定ファイルはconfig/image.php に配置されます。設定ファイルが存在しない場合は Artisan コマンドで公開します。
IMAGE_DRIVER で指定できます。サポートされているドライバーは gd と imagick です。
画像の読み込み
Image ファサードはさまざまなソースから画像インスタンスを生成するメソッドを提供します。画像の内容は遅延読み込みされるため、処理またはバイト列の要求があるまで実際には読み込まれません。
アップロードファイル
リクエストからアップロードされた画像を取得するにはimage メソッドを使います。ファイルが存在しない場合は null を返します。
UploadedFile インスタンスから生成する場合は fromUpload メソッドを使います。
file メソッドで元のファイルを取得できます。
ストレージファイル
ファイルシステムディスク に保存されているファイルから画像インスタンスを生成するにはfromStorage メソッドを使います。第一引数はファイルパス、第二引数はディスク名です。
image メソッドからも生成できます。
その他のソース
バイト列・ローカルパス・URL・Base64 からも画像インスタンスを生成できます。画像の加工
画像インスタンスはイミュータブルです。各メソッドは変換を処理パイプラインに追加した新しいインスタンスを返すため、メソッドチェーンで記述できます。変換はパイプラインに追加した順に処理され、エンコードは最後に一度だけ行われます。リサイズ
その他の変換
条件付き変換
画像インスタンスはConditionable トレイトをサポートしており、when / unless で条件付きの変換が可能です。
エンコード
デフォルトでは元のフォーマットでエンコードされます。フォーマットを変換するには以下のメソッドを使います。quality メソッドで出力品質(1〜100)を設定できます。
optimize メソッドはフォーマット変換と品質設定のショートカットです。デフォルトは WebP・品質 70 です。
保存
store メソッドで画像をファイルシステムディスクに保存します。Laravel は一意なファイル名を自動生成し、保存パスを返します。
storeAs を使います。
public 可視性で保存する場合は storePublicly / storePubliclyAs を使います。
false を返します。
画像情報の取得
mimeType・extension・dimensions・width・height メソッドで画像の情報を取得できます。これらのメソッドは処理後の画像を対象とします(例:cover(400, 400) 後に width() を呼ぶと 400 を返します)。
カスタムドライバー
Laravel の画像マネージャーはIlluminate\Support\Manager を継承しており、extend メソッドでカスタムドライバーを登録できます。
カスタムドライバーは Illuminate\Contracts\Image\Driver インターフェースを実装し、process メソッドで元の画像バイト列とパイプラインを受け取り、処理済み画像バイト列を返します。
boot メソッドで行います。
using メソッドを使います。
カスタム変換
Illuminate\Contracts\Image\Transformation インターフェースを実装したクラスでカスタム変換を定義できます。
boot メソッドで行います。
transform メソッドで適用します。