前書き
画像の加工を行う場合GDやImageMagickなど使う機会が多いですが、そんな二つを使いやすくしたライブラリ「Intervention Image」
色々と調べてみましたが、CakePHPで書かれたドキュメントは無く、Laravelで実装されたドキュメントしかありませんでした。
ドキュメントの中にはLaravelのライブラリと書いてある記事なんてのもあったんですが普通にPHPのライブラリなので、確認しながらCakePHPで導入と実装が出来たので備忘録程度に記事にしております。
※CakePHP4系統で実装しましたが、CakePHP3でも同様の書き方で導入、実装できるはずです。
本文
Intervention/image導入
まずは、composerでIntervention/imageをCakePHPのアプリにダウンロード
$ composer require intervention/image
以上。
導入は、Laravelと同じ。(PHPのライブラリなので)
CakePHPでの実装
失敗
Laravelの記事を参考にして、書いて実行をするとエラーが出てきます。
(Laravelで実装したことないので詳しくはわかりませんが)
//...その他名前空間は省略
use Intervention\Image\Facades\Image;
//テスト用に適当に作ったコマンド
class ImagResizeCommand extends Command{
public function initialize(): void{
parent::initialize();
}
public function execute(Arguments $args, ConsoleIo $io){
Image::make('image_path');
//...その他処理の省略
}
}
エラー内容↓
2021-06-10 01:01:31 Error: [Error] Class 'Illuminate\Support\Facades\Facade' not found in /Users/user_name/Desktop/app/vendor/intervention/image/src/Intervention/Image/Facades/Image.php on line 13
Stack Trace:
と、言われライブラリのコアな部分で読み込まれているFacadeが見つからない。と言われるので呼び出すクラスを変えて実装します。
成功
//...その他名前空間は省略
use Intervention\Image\ImageManager;
class ImagResizeCommand extends Command{
public function initialize(): void{
parent::initialize();
}
public function execute(Arguments $args, ConsoleIo $io){
//リサイズを行う画像のパス
$image_path = WWW_ROOT . DS .'img/' . 'cake-logo.png';
//リサイズされた後に保存されるファイル名
$resize_path = WWW_ROOT . DS .'img/' . 's_cake-logo.png';
$height = 100;
$width = 100;
//driverはgdにしていますが、ここで「ImageMagick」を指定することも可能です。
$manager = new ImageManager(['driver' => 'gd']);
$original_image = $manager->make($image_path);
$original_image->resize($width, $height);
//リサイズ完了
$original_image->save($resize_path);
}
}
上記のように呼び出すクラスをImageManagerにして、実装をしてみるとCakePHPでもIntervention/imageによる画像のリサイズをすることができました。