5

ImagickPHP拡張機能を使用して画像を生成するのに問題がありました。次の「モンタージュ」の背景が白いため、他のものの上に重ねることができないことを除いて、すべてが正常に機能します。背景が透明なモンタージュを生成するにはどうすればよいですか?

       $Montage = $Icons->montageImage(new imagickdraw(), "3x2+0+0", "34x34+3+3", imagick::MONTAGEMODE_UNFRAME, "0x0+0+0");
      $Canvas->compositeImage($Montage, $Montage->getImageCompose(), 5, 5);

ありがとう!!

4

2 に答える 2

4

これは古い質問ですが、Imagick の montageImage 関数を使用してこれを行う別の方法を見つけました。Imagick オブジェクトを作成したら、次のように背景を透明として宣言する必要があります。

$Icons->setBackgroundColor( new ImagickPixel('transparent') );

設定したら、透明な背景を持つ montageImage を作成する montageImage を介してオブジェクトを実行できます。

$Montage = $Icons->montageImage(new imagickdraw(), "3x2+0+0", "34x34+3+3", imagick::MONTAGEMODE_UNFRAME, "0x0+0+0");

次に、新しいモンタージュ画像を合成画像に追加して、定義済みの Imagick 合成定数 COMPOSITE_ATOP または次のように目的の定数を使用するようにします。

$Canvas->compositeImage($Montage, imagick::COMPOSITE_ATOP, 5, 5);

この質問に出くわしただけで、他の誰かが手動ループなしでこれを行う別の方法を望んでいる場合に備えて、別の解決策を投稿することにしました。

于 2013-06-21T04:41:12.980 に答える
3

私は同じ問題を抱えていて、imagick を強化する MagickWand C API がモンタージュのオプションをサポートしていないことを発見しました。

私は次のように手動でモンタージュしました:

// Add them to an array of Imagick objects, instead of using addImage().
$images = new Array();

// Make a transparent canvas.
$target = new Imagick();
$target->newImage($width, $height * count(images), 'none');

$i = 0;
foreach ($images as $image) {
    $target->compositeImage($image, imagick::COMPOSITE_COPY, 0, $height * $i++);
}
于 2010-10-12T21:50:09.490 に答える