3

ここでの最終目標は、入力画像のサイズを幅 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 でコマンド ライン エッジイン スパース フィルをどこから再作成しようとするのか、まったくわかりません。

4

1 に答える 1