0
0

Laravelプロジェクトでの写真圧縮 — Intervention Imageライブラリの使い方に関する備忘録

Last updated at Posted at 2024-09-16

概要

Laravelでの写真アップロード機能において、画像の圧縮はストレージの節約とパフォーマンス向上に重要です。この記事では、PHP用の画像操作ライブラリ「Intervention Image」の使い方について、私が開発中に経験した内容を備忘録としてまとめます。今回は、PHPのバージョンの関係で最新バージョン3ではなく、2.7を使った具体的な実装例を紹介します。

1. Intervention Imageライブラリとは?

Intervention Imageは、PHPで画像操作を簡単に行えるライブラリです。このライブラリを使用することで、画像のリサイズやトリミング、フィルターの適用など、様々な画像操作が可能になります。今回のプロジェクトでは、特に画像の圧縮とリサイズに焦点を当てて使用しました。

  • 使用したバージョン: intervention/image バージョン 2.7
    • 最新バージョンではなく、PHPの互換性(PHP 8.2がサポートされていない)と他の依存関係のため、バージョン 2.7 を選択しました。

2. インストールと設定

まず、LaravelプロジェクトにIntervention Imageをインストールする必要があります。今回使用したバージョン 2.7 を指定してインストールします。

composer require intervention/image "^2.7"

次に、config/app.php ファイルにService ProviderとFacadeを追加します。

'providers' => [
    Intervention\Image\ImageServiceProvider::class,
],

'aliases' => [
    'Image' => Intervention\Image\Facades\Image::class,
],

これで、Laravel内でIntervention Imageを使えるようになります。

3. 画像のリサイズと圧縮の実装例

以下のコードは、写真アップロード機能で使用した画像のリサイズと圧縮処理の実装例です。

use Intervention\Image\ImageManager;

// GDドライバーを使用するImageManagerのインスタンスを作成
$manager = new ImageManager(['driver' => 'gd']);

// アップロードされた画像の一時パスを取得
$temporaryPath = $this->photo->store('livewire-tmp', 'local');
$absolutePath = storage_path('app/' . $temporaryPath);

// 画像をリサイズし、アスペクト比を保持したまま最大幅800ピクセルに設定
$image = $manager->make($absolutePath)->resize(800, null, function ($constraint) {
    $constraint->aspectRatio(); // アスペクト比を維持
    $constraint->upsize(); // サイズの引き伸ばしを防止
});

// 圧縮した画像を保存(品質75%)
$compressedPath = 'photos/' . uniqid() . '.jpg';
$image->save(storage_path('app/public/' . $compressedPath), 75); // 75%の品質で保存
  • 備忘ポイントImageManagerクラスを使用して、GDドライバーを指定しています。GDはPHPのデフォルトで組み込まれている画像処理ライブラリで、外部ライブラリを必要としないため、特に簡単な操作には便利です。

4. PHPのバージョンと依存関係の制約について

今回の開発では、PHPのバージョンや他のフレームワークとの依存関係の都合で、Intervention Imageの最新バージョン(3.x)を使用することができませんでした。

  • 使用した環境:
    • OS: AWSのAmazon Linux 2
    • PHPバージョン: PHP 7.x(8.2はサポート外)

最新のPHPバージョンを使用することで、Intervention Imageの最新機能が使える場合もありますが、互換性の問題からプロジェクトで使用できないこともあるため、バージョン選定には注意が必要です。

5. 他の圧縮方法と比較

Intervention Imageを使うことの利点と、他の圧縮方法(例えば、外部のCLIツールを使ったバッチ処理など)との比較も考慮しました。

  • 利点:
    • LaravelとPHP内で完結するため、追加の外部ツールを導入する必要がない。
    • コードの統一性を保ち、開発者がPHPの文法に統一して作業できる。
  • 制約:
    • 高度な圧縮やフォーマット変換が必要な場合、Intervention Imageだけでは機能が不足することがある。

結論

Intervention Imageは、Laravelプロジェクトでの簡単な画像処理に非常に便利なライブラリです。PHPのバージョンや他の依存関係を考慮しながら、適切なバージョンを選択することが重要です。今後も、PHP内で画像処理を行う場合はこのライブラリを活用しつつ、必要に応じて他のツールや方法も検討していきます。

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