0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravel Intervention Image使えない場合の代案(リサイズとwebp変換等)

Posted at

課題

Laravelプロジェクトで画像処理に Intervention Image を導入しようとしても、

Class Intervention\Image\ImageManager not found

のようなエラーになる可能性がある。 LaravelのServiceProviderによるバインドが適切に行われていない、あるいはIntervention Imageのバージョン違いによるものである。
特に Intervention Image v3系 では、従来の Image::make() のような使い方ができなくなっており、明示的にドライバを指定する新しい書き方が必要になる。

ここでは、自前で軽量に画像のリサイズと WebP 変換を行うユーティリティクラスを作成する方法を紹介する。

対応方法

use Intervention\Image\Facades\Image;

の代わりに以下の書き方でうまくいった。

use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;
use Intervention\Image\Encoders\WebpEncoder;

このように、ImageManager を new でインスタンス化し、明示的に Gd ドライバを指定して使います。これにより、LaravelのServiceProviderに依存せずで使用可能となる。
これでリサイズとWebP変換を実装する。

具体例

<?php
namespace App\Utils;
use Illuminate\Support\Facades\Storage;
use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver;
use Intervention\Image\Encoders\WebpEncoder;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Carbon;

class ImageUtil
{
    public static function imageUpload($file, string $dir, ?string $name)
    {
    // 省略
    }

    private static function convertToWebP($file)
    {
        // GDドライバを使って ImageManager を初期化
        $manager = new ImageManager(new Driver());

        // アップロードされた画像ファイルを読み込む
        $image = $manager->read($file);

        // WebP形式へのエンコーダを作成
        $webpEncoder = new WebpEncoder();

        // WebP形式にエンコード
        $webpImage = $image->encode($webpEncoder);
        
        return $webpImage;
    }

    private static function resizeImage($file)
    {
        // GDドライバを使って ImageManager を初期化
        $manager = new ImageManager(new Driver());
        
        // アップロードされた画像ファイルを読み込む
        $image = $manager->read($file);
        
        // 画像を最大1920x1080にリサイズ(アスペクト比は保持される)
        $image->scaleDown(width: 1920, height: 1080); 
        
        return $image;
    }
}

[参考]

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?