ここでの最終目標は、入力画像のサイズを幅 100px、高さ 125px に変更することです。一部の入力画像はアスペクト比が異なるため、100x125 のコンテナーに入れ、背景のスパースをエッジの色から塗りつぶしたいと考えています。
OK、これは基本的なサイズ変更で機能します。
$image = new Imagick($imgFile);
$image->resizeImage(100,0, Imagick::FILTER_LANCZOS, 1, false);
$image->writeImage("$Dir/$game.png");
header("Content-type: ".$image->getImageFormat());
echo $image;
$image->clear();
$image->destroy();
しかし、私は何時間も検索してきましたが、PHP の Imagick ライブラリの単純な「これがキャンバスの中央に画像を配置する方法です」というビットを見つけることができません。すべては実際の ImageMagick 変換アプリケーションのためのものですが、これは私が求めているものではありません。サイズ変更された画像を設定された幅と高さで空の newImage に合成しようとしましたが、合成タイプに関係なく寸法を上書きするように見え、重力を中央に設定してから 100x125 までの範囲は効果がありません (常に0,0 に位置し、y オフセットを ((125-imageheight)/2) に設定しようとすると、オフセットが本来よりも大きくなりました)
編集:
$imageOutput = new Imagick();
$image = new Imagick($imgFile);
$image->resizeImage(100,0, Imagick::FILTER_LANCZOS, 1, false);
$imageOutput->newImage(100, 125, new ImagickPixel('black'));
$imageOutput->compositeImage($image, Imagick::COMPOSITE_ADD, 0, ((125 - $image->getImageHeight()))/2 );
$imageOutput->setImageFormat('png');
$imageOutput->writeImage("$Dir/$game.png");
header("Content-type: ".$imageOutput->getImageFormat());
echo $imageOutput;
$image->clear();
$image->destroy();
センタリングが機能するようになりました。重力は実際の画像に影響を与えないようです。
ライブラリを使用して PHP でコマンド ライン エッジイン スパース フィルをどこから再作成しようとするのか、まったくわかりません。