#画像フォーマット
サポートされる画像フォーマットは使用するドライバーによって異なります。Imagick と libvips では、それぞれのライブラリがサポートするすべての形式を読み込み可能で、下に挙げた形式への書き出しが可能です。GD では、下表に示す形式のみ読み書きできます。
出力セクションで異なる画像フォーマットのエンコードについて詳しく説明しています。
| フォーマット | GD | Imagick | libvips |
|---|---|---|---|
| JPEG | ✅ | ✅ | ✅ |
| GIF | ✅ | ✅ | ✅ |
| Animated GIF | ✅ | ✅ | ✅ |
| PNG | ✅ | ✅ | ✅ |
| AVIF | ✅ | ✅ | ✅ |
| Bitmap | ✅ | ✅ | ✅ |
| WebP | ✅ | ✅ | ✅ |
| Animated WebP | ❌ | ✅ | ✅ |
| TIFF | ❌ | ✅ | ✅ |
| JPEG 2000 | ❌ | ✅ | ✅ |
| HEIC | ❌ | ✅ | ✅ |
注意:すべての画像フォーマットが常に PHP の画像拡張に含まれているわけではありません。たとえば GD ライブラリがインストールされていても JPEG サポートが無効でビルドされている場合や、Imagick に WebP サポートが含まれていない場合があります。
これらの画像フォーマットはさまざまなソースから読み込めます。具体的には次のとおりです:
- ファイルシステム上のパス
- 生のバイナリ画像データ
- Base64 エンコードされた画像データ
- Data URI スキーム
- ファイルポインタのリソース
SplFileInfoから派生するIlluminate\Http\UploadedFileとSymfony\Component\HttpFoundation\File\UploadedFile- Intervention Image インスタンス (
Intervention\Image\Image) - エンコード済みの Intervention Image (
Intervention\Image\EncodedImage) - ドライバー固有の画像(
GDImageまたはImagickのインスタンス)
#画像フォーマットのサポート確認
public DriverInterface::supports(string|Format|FileExtension|MediaType $identifier): bool
このメソッドは実行時に特定のフォーマットがサポートされているかどうかを確認するために使えます。指定したフォーマットが現在のドライバーでサポートされているか、また基盤となる拡張が必要なサポートを有してビルドされているかをチェックし、両方が満たされる場合に true を返します。
#パラメータ
| Name | Type | Description |
|---|---|---|
| identifier | string, Format, FileExtension or MediaType | 画像フォーマットの識別子。ファイル拡張子の文字列、メディアタイプの文字列、または enum のメンバーとして渡せます。 |
#例
use Intervention\Image\Drivers\Imagick\Driver as ImagickDriver
use Intervention\Image\Format;
use Intervention\Image\MediaType;
use Intervention\Image\FileExtension;
$manager = ImageManager::withDriver(ImagickDriver::class);
// ドライバーが JPEG 形式をサポートしているかをファイル拡張子で確認する
$result = $manager->driver()->supports('jpg');
// ドライバーが JPEG 形式をサポートしているかをメディアタイプで確認する
$result = $manager->driver()->supports('image/jpeg');
// ドライバーが JPEG 形式をサポートしているかを enum メンバーで確認する
$result = $manager->driver()->supports(Format::JPEG);
// ドライバーが JPEG 形式をサポートしているかを enum メンバーで確認する
$result = $manager->driver()->supports(MediaType::IMAGE_JPEG);
// ドライバーが JPEG 形式をサポートしているかを enum メンバーで確認する
$result = $manager->driver()->supports(FileExtension::JPG);
#カラーフォーマット
このライブラリは、メソッドで色を指定するためのいくつかのフォーマットをサポートしています。
色の入力値は画像の実際のカラースペースと異なる場合があります。そのため、HSV の色指定で CMYK 画像に描画することも可能です。色は自動的にターゲットのカラースペースに変換されます。
#文字列形式
#16進数文字列形式
色は HTML や CSS で一般的に使われる RGB の16進トリプレットとして渡せます。省略表記やフル表記、アルファチャネルあり/なしの形式が使用可能です。先頭の # は省略できます。
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
// 赤い背景で新しい画像を作成する
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('b53717');
// 半透明の赤い背景で新しい画像を作成する
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('b5371766');
#RGB 文字列形式
RGB の関数表記の文字列もサポートしています。アルファ値を含める場合は RGBA を使用します。以下の例を参照してください。
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;
// 半透明の背景で新しい画像を作成する
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('rgba(15, 20, 255, .5)');
// 赤い背景で新しい画像を作成する
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('rgb(255, 0, 0)');
#CMYK 文字列形式
関数表記の CMYK 文字列もサポートしています。
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
// 背景色で新しい画像を作成する
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('cmyk(100, 100, 55, 60)');
#HSV/HSB 文字列形式
RGB の代替である HSV/HSB 形式の色文字列も渡せます。
use Intervention\Image\ImageManager;
// 半透明の背景で新しい画像を作成する
$image = ImageManager::imagick()->read('example.jpg');
// 色付きピクセルを描画する
$image->drawPixel(120, 200, 'hsv(230, 15, 75)');
#HSL 文字列形式
HSL 色形式の文字列も渡せます。
use Intervention\Image\ImageManager;
// 半透明の背景で新しい画像を作成する
$image = ImageManager::imagick()->read('example.jpg');
// 画像を色で塗りつぶす
$image->fill(120, 200, 'hsl(100, 15, 10)');
#HTML カラー名
Intervention Image は W3C の仕様にある拡張された 140 の HTML カラー名を読み取れます。
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;
// 半透明の背景で新しい画像を作成する
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('steelblue');
#透過
色として透過を指定する必要がある場合は、キーワード transparent を使えば常に指定できます。
use Intervention\Image\ImageManager;
$manager = ImageManager::gd();
$image = $manager->read('images/example.png');
$image->pad(300, 200, 'transparent');
#カラーオブジェクト
色はオブジェクト形式でも定義できます。現在、各カラースペースごとに別個のカラークラスが用意されています。
#RGB カラーオブジェクト
RGB カラーオブジェクトは、基本チャンネル用の3つのパラメータとオプションのアルファチャンネルパラメータを使用します。アルファチャンネルはデフォルトで完全に不透明です。
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;
use Intervention\Image\Colors\Rgb\Color;
// 半透明の背景で新しい画像を作成する
$image = (new ImageManager(Driver::class))->create(300, 200)->fill(new Color(45, 0, 10, .5));
// 赤い背景で新しい画像を作成する
$image = (new ImageManager(Driver::class))->create(300, 200)->fill(new Color(255, 0, 0));
#CMYK カラーオブジェクト
CMYK カラーオブジェクトは、カラースペースの4つのチャンネルに対応する4つのパラメータで構成されます。
use Intervention\Image\ImageManager;
use Intervention\Image\Colors\Cmyk\Color;
// 半透明の背景で新しい画像を作成する
$image = ImageManager::imagick()->create(300, 200)->fill(new Color(100, 100, 55, 60));
#HSV/HSB カラーオブジェクト
HSV/HSB カラーオブジェクトのコンストラクタは、色相(Hue)、彩度(Saturation)、明度/輝度(Value/Brightness)の3つのパラメータを受け取ります。
use Intervention\Image\ImageManager;
use Intervention\Image\Colors\Hsv\Color;
// 半透明の背景で新しい画像を作成する
$image = ImageManager::imagick()->create(300, 200)->fill(new Color(230, 15, 75));
#HSL カラーオブジェクト
HSL カラーオブジェクトのコンストラクタは、色相(Hue)、彩度(Saturation)、輝度(Luminance)の3つのパラメータを受け取ります。
use Intervention\Image\ImageManager;
use Intervention\Image\Colors\Hsl\Color;
// 半透明の背景で新しい画像を作成する
$image = ImageManager::imagick()->create(300, 200)->fill(new Color(230, 15, 75));
#カラースペース
利用可能なカラースペースは主に使用するドライバーによって決まります。Imagick ドライバーは RGB と CMYK の両方をサポートしますが、GD ドライバーは RGB のみをサポートします。新しく作成した画像のデフォルトのカラースペースは RGB です。
Intervention Image で GD ドライバーを使って CMYK 画像を読み込むと、自動的に RGB カラースペースに変換され、色味が変わる可能性があります。
GD ドライバーは CMYK をサポートしていないため、CMYK 画像には使用を推奨しません。
カラースペースの読み取りや変更方法は、メタ情報 のセクションを参照してください。
#色を他のカラースペースやフォーマットに変換する
色は常にサポートされているカラースペースに変換できます。ドライバーが目的のカラースペースをサポートしていなくても変換可能です。
カラーオブジェクトは以下のフォーマットにも変換できます。
Intervention\Image\Colors\Rgb\ColorspaceIntervention\Image\Colors\Cmyk\ColorspaceIntervention\Image\Colors\Hsv\ColorspaceIntervention\Image\Colors\Hsl\Colorspace
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
use Intervention\Image\Colors\Hsv\Colorspace as HsvColorspace;
// ファイルシステムから RGB 画像を読み込む
$manager = new ImageManager(new Driver());
$image = $manager->read('example.jpg');
// 指定位置のピクセルの色を取得する
$color = $image->pickColor(100, 100);
// 色を HSV 形式に変換する
$color = (string) $color->convertTo(HsvColorspace::class); // 'hsv(220, 10, 65)'