#Laravel
Intervention Image は 公式統合パッケージ を使って Laravel アプリケーションに簡単に統合できます。このパッケージは Laravel のサービスプロバイダー、ファサード、公開可能な設定ファイルなどを提供します。
#インストール
Intervention Image 本体を直接インストールする代わりに、intervention/image-laravel パッケージを統合するだけで十分です。必要なベースライブラリは自動的にインストールされます。
composer require intervention/image-laravel
#アプリケーション全体の設定
この拡張は Laravel に認識されるグローバル設定ファイルを同梱しています。これにより Intervention Image の設定を一度中央で保存しておけるため、イメージマネージャを呼び出すたびに個別に定義する必要がなくなります。
設定ファイルは次のコマンドでアプリケーションにコピーできます。
php artisan vendor:publish --provider="Intervention\Image\Laravel\ServiceProvider"
このコマンドは設定ファイル config/image.php を公開します。ここで Intervention Image の使用したいドライバーとその設定オプションを指定できます。デフォルトではライブラリは画像処理に GD ライブラリを使用するように設定されています。
設定ファイルは次のようになります。
return [
/*
|--------------------------------------------------------------------------
| 画像ドライバー
|--------------------------------------------------------------------------
|
| Intervention Image は内部で画像を処理するために「GD Library」または「Imagick」をサポートします。
| PHP の環境に応じていずれかを選択できます。
|
| 利用可能なオプション:
| - \Intervention\Image\Drivers\Gd\Driver::class
| - \Intervention\Image\Drivers\Imagick\Driver::class
|
*/
'driver' => \Intervention\Image\Drivers\Gd\Driver::class,
/*
|--------------------------------------------------------------------------
| 設定オプション
|--------------------------------------------------------------------------
|
| これらのオプションは Intervention Image の動作を制御します。
|
| - "autoOrientation" は、取り込んだ画像を既存の Exif データに応じて自動的に回転するかどうかを制御します。
|
| - "decodeAnimation" は、アニメーションの可能性がある画像をそのままデコードするか、アニメーションを破棄するかを決定します。
|
| - "blendingColor" はデフォルトのブレンディングカラーを定義します。
|
| - "strip" はエンコード時に exif タグなどのメタデータを削除するかどうかを制御します。
*/
'options' => [
'autoOrientation' => true,
'decodeAnimation' => true,
'blendingColor' => 'ffffff',
'strip' => false,
]
];
これらのオプションの詳細は、ドライバー選択、自動回転、アニメーションのデコード、およびブレンディングカラー の各ページを参照してください。
#静的ファサードインターフェース
このパッケージはまた、ImageManager::class へのアクセスを静的な ファサード 経由で統合します。この呼び出しにより、シングルトンパターンで中央設定された image manager にアクセスできます。
次のコード例は、アップロードされたリクエストから画像を読み込み、Laravel のルート内でイメージファサードを使ってランダムなファイル名でディスクに保存する方法を示します。
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Str;
use Intervention\Image\Laravel\Facades\Image;
Route::get('/', function (Request $request) {
$upload = $request->file('image');
$image = Image::read($upload)
->resize(300, 200);
Storage::put(
Str::random() . '.' . $upload->getClientOriginalExtension(),
$image->encodeByExtension($upload->getClientOriginalExtension(), quality: 70)
);
});
#画像レスポンスマクロ
image(Image $image, null|string|Format|MediaType|FileExtension $format = null, mixed ...$options)
このパッケージにはレスポンスマクロが含まれており、画像リソースをエレガントにエンコードして一度の処理で HTTP レスポンスに変換できます。
マクロは画像と出力フォーマットに合わせた HTTP ヘッダーの設定を自動的に行います。
次のコード例は、ディスクから画像を読み込み、変更を加え、画像レスポンスマクロでエンコードしてユーザーへ一度の呼び出しで返す方法を示します。最初のパラメータのみが必須です。
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Storage;
use Intervention\Image\Format;
use Intervention\Image\Laravel\Facades\Image;
Route::get('/', function () {
$image = Image::read(Storage::get('example.jpg'))
->scale(300, 200);
return response()->image($image, Format::WEBP, quality: 65);
});
#Symfony
Intervention Image は Symfony フレームワークにも統合できます。便利な方法として 公式統合バンドル を利用できます。
この統合ライブラリの使用は必須ではありませんが、Symfony フレームワークで集中管理された設定を行う便利な手段を提供します。
#インストール
Intervention Image 本体を直接インストールする代わりに、バンドルパッケージ intervention/image-symfony を require するだけで十分です。対応する依存関係は自動的にインストールされます。
composer require intervention/image-symfony
#アプリケーション全体の設定
インストールが完了したら、Symfony アプリケーションのファイル config/bundes.php の配列に次の行を挿入してバンドルを有効化できます。
return [
// ...
Intervention\Image\Symfony\InterventionImageBundle::class => ['all' => true],
];
これで Intervention Image のドライバーを設定できます。デフォルトではバンドルは Intervention Image で GD ライブラリを使用します。これやその他のオプションは config/packages/intervention_image.yaml を作成して、以下のようにドライバークラスとデフォルトオプションを設定することで変更できます。
intervention_image:
driver: Intervention\Image\Drivers\Gd\Driver
options:
autoOrientation: true
decodeAnimation: true
blendingColor: 'ffffff'
strip: false
まず、提供されている 2 つのドライバー Intervention\Image\Drivers\Gd\Driver と Intervention\Image\Drivers\Imagick\Driver のどちらかを選択します。
その後、オプションを使ってライブラリの動作を決定できます。詳細は ドライバー選択、自動回転、アニメーションのデコード、および ブレンディングカラー を参照してください。
#依存性注入
統合は完了しており、依存性注入を通じて ImageManager にアクセスできます。
namespace App\Controller;
use Intervention\Image\ImageManager;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class ExampleController extends AbstractController
{
#[Route('/')]
public function example(ImageManager $manager): Response
{
$image = $manager->read('images/example.jpg');
}
}