>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン 組み込み セキュリティ
PHP

PHPでの画像処理に苦しむのをやめる方法

Latest Version Build Status Monthly Downloads Support me on Ko-fi

GD拡張を使って純粋なPHPでサムネイル生成を書いたことがある人なら、この的痛苦を覚えているでしょう。暗号のようなシグネチャを持つ十几个の低レベル関数、手動の座標計算、そして constantlyのメモリリーク。Imagickでは構文が少し良くなりますが、独自のメソッドのzooがあります。

Intervention Imageライブラリは、10年以上前からまさにこの問題を解決しています。统一的で読みやすいinterfaceの裏でシステム拡張を隠します。このプロジェクトは最近v3/v4に到達し、モダンなPHPバージョン向けにアーキテクチャが完全に書き換えられました。

ライブラリの中身

このプロジェクトは、グラフィックエンジンの上に便利なラッパーを提供します。読みやすくチェーン可能なコードを書くと、ライブラリが内部で必要なシステムコールを自動的に実行します。

ここでの主な特徴は、交換可能なドライバーです。現在このプロジェクトは以下のをサポートしています:

  • GD(ほぼすべてのホスティングで利用可能な標準ライブラリ)
  • Imagick(ImageMagickに基づく拡張機能)
  • libvips(別個のドライバーを通じて低メモリ消費で高速なエンジン)

サーバーにImageMagickがない場合は、アプリケーションのビジネスロジックを書き換えることなく、ドライバーをGDに単に切り替えることができます。高負荷サービスにはlibvipsを接続でき、重い画像を処理する際のRAMをより慎重に扱いながら、何倍も高速に動作します。

別の良い詳細は、すべての利用可能なドライバーでのアニメーション画像(GIF、WebP)の完全なサポートです。以前は、アニメーションを操作するにはImagickに密結合である必要がありました。

コードの姿

始めるには、Composerでライブラリをインストールしてください:

composer require intervention/image

PHP 8.3以降、mbstring拡張機能、および選択したグラフィックモジュールのいずれかが必要です。

画像をスケールし透かしを適用し、結果をWebPまたはJPEGとして保存する基本的な例です:

use Intervention\Image\ImageManager;
use Intervention\Image\Drivers\Gd\Driver as GdDriver;
use Intervention\Image\Alignment;
use Intervention\Image\Format;

// Инициализируем менеджер с нужным драйвером
$manager = ImageManager::usingDriver(GdDriver::class);

// Читаем исходный файл
$image = $manager->decodePath('images/example.webp');

// Пропорционально меняем размер по высоте
$image->scale(height: 300);

// Накладываем водяной знак в правый нижний угол
$image->insert('images/watermark.png', alignment: Alignment::BOTTOM_RIGHT);

// Кодируем результат с заданным качеством
$encoded = $image->encodeUsingFormat(Format::JPEG, quality: 65);

// Сохраняем готовый файл
$encoded->save('images/example.jpg');

この構文はPHP 8の名前付き引数と、Alignment::BOTTOM_RIGHTFormat::JPEGのようなenumを使用した厳格なタイピングに依存しています。パラメータで間違えることは今はるかに難しく、IDEの自動補完が箱から出してすぐに動作します。

典型的なユースケース

このパッケージは特定のフレームワークに依存していないため、Laravel、Symfony、またはRoadRunnerマイクロサービスに同様に簡単に統合できます。

  1. アバターとサムネイル生成。切り抜き、正方形へのフィット(cropcoverscale)、公開前のメタデータ削除。
  2. オンデマンドのコンテンツ最適化。重いPNGとJPEGを圧縮付きでモダンなWebPまたはAVIFに変換。
  3. 著作権保護。CDNにファイルを提供する前にバッチ透かし入れとロゴオーバーレイ。
  4. アニメーションの操作。フレームを失うことなくGIFの切り抜きまたはリサイズ。

プロジェクトに追加する価値があるか

PHP 8.3+で書いていてユーザーファイルを処理する必要がある場合、Intervention Imageは多くの時間を節約できます。本質的に、PHPエコシステムにおけるグラフィックスのデファクトスタンダードです。

1つのニュアンスとして、プロジェクトが7.4や8.1のような古いPHPバージョンに縛られている場合、完全に異なるAPIを持つv2ブランチに留まる必要があります。しかし、新しいスタックにとっては、ライブラリは完璧にフィットします。

関連プロジェクト