0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CakePHPでIntervention Image(laravelでお馴染み)を導入して画像のリサイズをする方法

Last updated at Posted at 2021-06-09

前書き

画像の加工を行う場合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による画像のリサイズをすることができました。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?