はじめに
この記事は画像加工ライブラリinterventionの自分用和訳メモです。
公開時点での和訳、また中学英語1だった管理人による翻訳なので、いつも以上に自己責任でお願いします。
詳しくは本家を見るようにしてください。←マジ重要
interventionとは?
そもそもinterventionとは、PHPの一般的な画像処理ライブラリであるGDとImagickをサポートしている高性能な画像処理ライブラリです。
画像の拡大縮小、回転、色調補正、トリミングなど、画像編集フリーソフトで行う加工ができます。
また、現時点での最新バージョンはver3ですが、ネットには以前のver2に関する記事が多く、インストール後の使い方が異なります。
これはinterventionのソースコードがPHP8に準拠するためにver3からゴッソリ書き直されているのが理由なので、今自分がver2とver3のどちらを使っているのか気をつけましょう。
ちなみにこの記事ではタイトルの通りver3について書いています。
ver2はネットを漁ればいくらでも出てくるので和訳しません。
サーバー要件
interventionを動かすにはPHP8.1以上、mbstring拡張モジュール、GDかImagickの3つが最低限必要です。
さらにExif PHP 拡張機能もインストールすることを推奨しており、これは画像の向きを正しく表示するために使用するそうです。
回転させるときにしか使わないかもしれませんが、推奨しているので入れておきましょう。
- PHP >= 8.1
- mbstring 拡張機能
- 画像処理拡張機能
- GD Image
- Imagick
- Exif PHP 拡張機能(推奨)
インストール方法
インストールにはComposerを使うので、まだの人は入れておきましょう。
composer require intervention/image
これにより、最新バージョンの Intervention Image がインストールされます。
Composerのオートローダーを介して使用できるようになります。
require './vendor/autoload.php';
// Intervention Imageを読み込む
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
// インスタンスを作成
$manager = new ImageManager(new Driver());
Intervention ImageはLaravelとSymfony向けに専用の統合パッケージを配布しています。
これはver2にはなかったもので、大体の記事はver2をベースに書かれているので注意しましょう。
Laravel
# パッケージのインストール
composer require intervention/image-laravel
#アプリケーションに構成ファイルを追加
php artisan vendor:publish --provider="Intervention\Image\Laravel\ServiceProvider"
上記コマンドを実行することで、app/config
にimage.php
という設定ファイルが作成されます。
デフォルトではimage.phpの’driver’にGD
が選択されているので、必要に応じてImagick
に切り替えてください。
- GDの場合:
Intervention\Image\Drivers\Gd\Driver
- Imagickの場合:
Intervention\Image\Drivers\Imagick\Driver
以後はLaravelのファサードを介してImageManagerにアクセスできるようになります。
// 画像を読み込む例
use Intervention\Image\Laravel\Facades\Image;
$image = Image::read('path/example.jpg');
// 以下、加工などの処理
Symfony
# パッケージのインストール
composer require intervention/image-symfony
インストールが成功したらconfig/bundle.php
のreturn
に以下を追加します。
return [
// 既存のコード...
Intervention\Image\Symfony\InterventionImageBundle::class => ['all' => true],
];
続けて、config/packages/intervention_image.yaml
を作成し、ドライバークラスとデフォルトオプションを以下のように設定することで使えるようになります。
driverはLaravelと同じでGDまたはImageckを指定してください。
intervention_image:
driver: Intervention\Image\Drivers\Gd\Driver
options:
autoOrientation: true
decodeAnimation: true
blendingColor: 'ffffff'
対応している画像形式
画像フォーマット
Format | GD | Imagick |
---|---|---|
JPEG | ✅ | ✅ |
GIF | ✅ | ✅ |
Animated GIF | ✅ | ✅ |
PNG | ✅ | ✅ |
AVIF | ✅ | ✅ |
Bitmap | ✅ | ✅ |
WebP | ✅ | ✅ |
Animated WebP | ❌ | ✅ |
TIFF | ❌ | ✅ |
JPEG 2000 | ❌ | ✅ |
HEIC | ❌ | ✅ |
画像形式をサポートしているか確認
use Intervention\Image\Drivers\Imagick\Driver;
use Intervention\Image\Format;
use Intervention\Image\MediaType;
use Intervention\Image\FileExtension;
// driverオブジェクトのインスタンスを作成
$driver = new Driver();
// 拡張子で確認
$result = $driver->supports('jpg');
// メディアタイプで確認
$result = $driver->supports('image/gif');
// enum memberで確認1
$result = $driver->supports(Format::PNG);
// enum memberで確認2
$result = $driver->supports(MediaType::IMAGE_AVIF);
// enum memberで確認3
$result = $driver->supports(FileExtension::TIFF);
カラーフォーマット
Intervention Imageは色定義にいくつかの形式をサポートしています。
16進数(透過可能)
16進数の#は省きます。
use Intervention\Image\Drivers\Imagick\Driver;
// create new image with red background
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('b53717');
// create new image with half transparent red background
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('b5371766');
RGB / RGBA
use Intervention\Image\Drivers\Gd\Driver;
// create new image with half transparent background
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('rgba(15, 20, 255, .5)');
// create new image with red background
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('rgb(255, 0, 0)');
CMYK
use Intervention\Image\Drivers\Imagick\Driver;
// create new image with background
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('cmyk(100, 100, 55, 60)');
HSV/HSB
// create new image with half transparent background
$image = ImageManager::imagick()->read('example.jpg');
// draw colored pixel
$image->drawPixel(120, 200, 'hsv(230, 15, 75)');
HTML色名
W3C使用の140個のHTML色名を使えます。
use Intervention\Image\Drivers\Gd\Driver;
// create new image with half transparent background
$image = (new ImageManager(Driver::class))->create(300, 200)->fill('steelblue');
透明性
$manager = ImageManager::gd();
$image = $manager->read('images/example.png');
$image->pad(300, 200, 'transparent');
カラースペース
使用可能なカラースペースは使用するドライバーによって決まります。
ImagickはRGBとCMYKの交換性がありますが、GDはRGBのみサポートします。
なお、上記のコード例のように新しく作成されたイメージのデフォルトカラースペースはRGBです。
GDでCMYK画像を読み込むと、自動的にRGBに変換され、色の偏差が生じる可能性があります。
GDはCMYKをサポートしていないので、基本的にはImagickの使用をオススメします。
カラースペースの変換
GDとImagickがサポートしているカラースペースは上記のとおりですが、画像に書き出す前のカラーオブジェクトは以下の3つに変換することもできます。
Intervention\Image\Colors\Rgb\Colorspace
Intervention\Image\Colors\Cmyk\Colorspace
Intervention\Image\Colors\Hsv\Colorspace
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Imagick\Driver;
use Intervention\Image\Colors\Hsv\Colorspace as HsvColorspace;
// read RGB image from filesystem
$manager = new ImageManager(new Driver());
$image = $manager->read('example.jpg');
// retrieve color of pixel at given position
$color = $image->pickColor(100, 100);
// convert color to HSV format
$color = (string) $color->convertTo(HsvColorspace::class); // 'hsv(220, 10, 65)'
続きは後日…
コメント