0

これは私の心を吹き飛ばしています。2つの透過PNGをマージしたい。

1 つは、正方形の画像からオンザフライで生成された円 ($source) です。2 番目はマップ マーカー ($marker) で、最初のマーカーの後ろに収まるように透明な円が表示されます。

imagepng($ソース); および imagepng($marker); 期待どおりに出力されます。透明な背景。

次に、マーカーのサイズの空の透明な画像を作成して、両方を一緒に配置します。

//NEW BLANK TRANSPARENT IMAGE
$dest = imagecreatetruecolor(50, 61);
$transparent = imagecolorallocatealpha($dest, 0, 0, 0, 127);
imagefill($dest, 0, 0, $transparent);
imagealphablending($dest, true);
imagesavealpha($dest,true);

//COPY THE CIRCLE       
imagecopy($dest, $source, 5, 5, 0, 0, 41, 41);

//AND THE MARKER ON TOP
imagecopy($dest, $marker, 0, 0, 0, 0, 50, 61);

その結果、円は、円が内側にある黒い四角形として表示されます。$source と $dest の両方で imagealphablending と imagesavealpha の多くの組み合わせを試しましたが、何もうまくいかないようです。

黒い四角を削除して、結果の $source をマージ前と同じように透明のままにするにはどうすればよいですか?

4

1 に答える 1

0

ここでの問題は次のとおりです。

その場で円を生成するために、円形マスクを作成し、他のすべてを透明にして赤にし、次に赤を透明にしました。これは imagesavealpha(true) と互換性がありません。これは、gd エンジンが透明な色を正確に無視し、代わりにアルファ チャネル全体を保存することを示しているためです。

両方の画像をマージすると、透明だった色が黒くなります。

私の場合の解決策は、ピクセルごとに分析し、円形の方程式を使用して円の内側にある場合は空白の画像にコピーすることでした。

于 2013-03-30T20:22:56.957 に答える