#画像の読み込み
#画像ソースの読み込み
public ImageManager::read(mixed $input, string|array|DecoderInterface $decoders = []): ImageInterface
設定済みの Image Manager を使うと、さまざまなソースから画像を読み込むことができます。メソッドはファイルシステム上のパスだけでなく、バイナリ画像データ、Base64 エンコードされた画像データ、Data Uri 形式の画像も受け付けます。さらに、さまざまなオブジェクトや PHP のリソースを入力として渡すことも可能です。受け付ける入力の一覧は下記を参照してください。
#パラメータ
| Name | Type | Description |
|---|---|---|
| input | mixed | 画像ソース |
| decoders | string, array or DecoderInterface | 入力データを処理するデコーダー。デフォルトではデコーダーは自動的に検出されます |
#サポートされる画像ソース
次の input 引数の形式が受け付けられます。
- ファイルシステム内のパス
- 生の(バイナリ)画像データ
- Base64 エンコードされた画像データ
- Data URI
- ファイルポインタリソース
SplFileInfo(Illuminate\Http\UploadedFileとSymfony\Component\HttpFoundation\File\UploadedFileの派生元)- Intervention Image のインスタンス (
Intervention\Image\Image) - エンコードされた Intervention Image (
Intervention\Image\EncodedImage) - ドライバー固有の画像(
GDImageまたはImagickのインスタンス)
入力データをデコードするために、第2引数でデコード戦略を指定できます。これはクラス名のarrayまたは順に処理されるデコーダーのオブジェクトの配列で指定できます。この場合、入力は渡したデコーダーのいずれかでデコード可能である必要があります。単一のデコーダーオブジェクトやクラス名を渡すことも可能です。
DecoderInterface::class を実装するすべてのデコーダーを渡せます。通常は Intervention\Image\Decoders 名前空間のクラス群が選ばれます。
第2引数を省略した場合、ドライバーは利用可能なすべてのデコーダーを使ってデコードを試みます。渡された引数がライブラリでデコードできない場合、Intervention\Image\Exceptions\DecoderException 型の例外がスローされます。
#例
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
// 希望するドライバーで新しいマネージャーインスタンスを作成
$manager = new ImageManager(new Driver());
// ファイルシステムから画像を読み込む
$image = $manager->read('images/example.jpg');
// バイナリデータから画像を読み込む
$image = $manager->read(file_get_contents('images/example.jpg'));
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
use Intervention\Image\Decoders\DataUriImageDecoder;
use Intervention\Image\Decoders\Base64ImageDecoder;
use Intervention\Image\Decoders\FilePathImageDecoder;
// 希望するドライバーで新しいマネージャーインスタンスを作成
$manager = new ImageManager(new Driver());
// Data URI または Base64 エンコードデータのみから画像を読み込む
$image = $manager->read($input, [
DataUriImageDecoder::class,
Base64ImageDecoder::class,
]);
// ファイルパスからのみ画像を読み込む
$image = $manager->read($input, FilePathImageDecoder::class);
// クラス名の代わりにオブジェクトを渡す場合
$image = $manager->read($input, new FilePathImageDecoder());
#画像の作成
#新しい画像の作成
public ImageManager::create(int $width, int $height): ImageInterface
既存の画像ソースを読み込むことはできますが、自分で画像を作成したい場合もあるでしょう。Intervention Image はその手助けをします。まず Intervention\Image\ImageManager クラスのインスタンスを用意し、必要な画像サイズを引数にして create() メソッドを呼び出します。例は以下のとおりです:
デフォルトでは画像は透明な背景で作成されます。背景色を指定したい場合は、作成後に fill() メソッドを使用してください。
#パラメータ
| Name | Type | Description |
|---|---|---|
| width | integer | 画像の幅 |
| height | integer | 画像の高さ |
#例
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
// 希望するドライバーで新しいマネージャーインスタンスを作成
$manager = new ImageManager(Driver::class);
// 640x480 の新しい画像を作成
$image = $manager->create(640, 480);
// グレーの背景で 512x512 の新しい画像を作成
$image = $manager->create(512, 512)->fill('ccc');
#アニメーションの作成
public ImageManager::animate(callable $callback): ImageInterface
アニメーション画像を作成することもできます。そのためには "animate" 関数を使用します。この関数にはコールバック関数を渡し、各アニメーションフレームのソースと遅延時間を決定します。こうして作成されたアニメーションは、アニメーションをサポートするフォーマットで出力される点に注意してください。
すべての提供ドライバーでアニメーションが可能です。 アニメーション画像の編集方法の詳細はこちら
#パラメータ
| Name | Type | Description |
|---|---|---|
| callback | callable | アニメーションの設定 |
#例
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;
// 希望するドライバーで新しいマネージャーインスタンスを作成
$manager = new ImageManager(new Driver());
// 3 フレームのアニメーションを作成し、各フレームの遅延を 250ms に設定
$image = $manager->animate(function ($animation) {
$animation->add('images/frame01.png', .25);
$animation->add('images/frame02.png', .25);
$animation->add('images/frame03.png', .25);
})->setLoops(4);
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
// 希望するドライバーで新しいマネージャーインスタンスを作成
$manager = new ImageManager(Driver::Class);
// drawCircle メソッドで独自のアニメーションフレームを作成して、
// ループする 5 フレームのサークルアニメーションを作成
$animation = $manager->animate(function ($animation) use ($manager) {
for ($i = 1; $i <= 5; $i++) {
$animation->add(
$manager->create(300, 300) // フレームサイズ
->fill('b53717') // フレームの背景色
->drawCircle(150, 150, function ($circle) use ($i) {
$circle->radius(40 * $i); // 円の半径(ピクセル)
$circle->border('fff', 5); // 枠線の色と太さ
}),
.15 // フレームの遅延
);
}
})->setLoops(10);