输入图像具有洋红色背景。
输出的图像始终为黑色背景。
两次尝试都给出相同的结果。我希望它是alpha背景,而不是黑色背景。
尝试#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');
答案 0 :(得分:0)
似乎imagecolorallocatealpha
的alpha参数是非标准的。使用0到127,其中127是完全透明的。
答案 1 :(得分:0)
你的#1#看起来不错,只是不要触摸alphablending。
为了避免透明度问题,我习惯在创建图片后设置它:
$image = imagecreatetruecolor($width, $height);
$trans = imagecolorallocate($image, 0xFF, 0x0, 0xFF);
imagefill($image, 0, 0, $trans);
imagecolortransparent($image, $trans);
在这里,我确信我的整个图像背景是透明的,我只需要把我的东西放进去。