0

入力画像の背景はマゼンタです。

出力画像の背景は常に黒です。

どちらの試行でも同じ結果が得られます。黒の背景ではなく、アルファの背景にしたい。

試み #1:

imagesavealpha($image, true);
imagealphablending($image, false);
$trans = imagecolorallocate($image, 255, 0, 255);
imagecolortransparent($image, $trans);
imagepng($image, $label . '.png');

試み #2:

imagesavealpha($image, true);
imagealphablending($image, false);
$trans = imagecolorallocatealpha($image, 0, 0, 0, 0);
for ($x = 0; $x < imagesx($image); ++$x) {
    for ($y = 0; $y < imagesy($image); ++$y) {
        $rgb = imagecolorat($image, $x, $y);
        $r = ($rgb >> 16) & 0xFF;
        $g = ($rgb >> 8) & 0xFF;
        $b = $rgb & 0xFF;
        if ($r == 255 && $g == 0 && $b == 255) {
            imagesetpixel($image, $x, $y, $trans);
        }
    }
}
imagepng($image, $label . '.png');
4

2 に答える 2

0

あなたの試み#1は私には良さそうに見えますが、アルファブレンディングには触れないでください。

透明性の問題を回避するために、イメージを作成した直後に設定するのに慣れています。

$image = imagecreatetruecolor($width, $height);
$trans = imagecolorallocate($image, 0xFF, 0x0, 0xFF);
imagefill($image, 0, 0, $trans);
imagecolortransparent($image, $trans);

ここでは、画像の背景全体が透明であると確信しており、その中に自分のものを入れるだけです。

于 2013-04-28T08:19:38.000 に答える