質問

Imagicick PHP拡張機能で画像を生成するのに苦労しています。次の「モンタージュ」には白い背景があることを除いて、すべてが正常に機能します。したがって、他の何かの上にオーバーレイすることはできません。透明な背景でモンタージュを生成するにはどうすればよいですか?

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

ありがとう!!

役に立ちましたか?

解決

私は同じ問題を抱えており、Magickwand C APIがImagicickを駆動することで、Montageのオプションをサポートしていないことを発見しました。

私はこのように手動でそれをモンテーシングすることになりました:

// 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++);
}

他のヒント

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

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

それが設定されると、透明な背景を持つモンタージメージを作成するMontageImageを介してオブジェクトを実行できます。

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

次に、新しいモンタージュ画像を複合画像に追加して、事前に定義されたImagicIck Composite Conter Composite_Atopまたはこのような目的の定数を使用することを確認できます。

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

この質問に出くわしたばかりで、他の誰かが手動ループなしでこれを行う別の方法を望んでいる場合に別のソリューションを投稿することにしました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top