PHP+;GD:imagetruecolortopalette未保持透明度
我正在使用GD输出一个图像,它是一个使用imagepng的truecolor+alpha通道PNG文件。然而,我想有能力也输出一个ie6兼容的256色PNG以及。根据imagetruecolortopalette的官方文档: 除了尽可能地保留颜色外,还对代码进行了修改,以在生成的调色板中保留尽可能多的alpha通道信息PHP+;GD:imagetruecolortopalette未保持透明度,php,png,gd,Php,Png,Gd,我正在使用GD输出一个图像,它是一个使用imagepng的truecolor+alpha通道PNG文件。然而,我想有能力也输出一个ie6兼容的256色PNG以及。根据imagetruecolortopalette的官方文档: 除了尽可能地保留颜色外,还对代码进行了修改,以在生成的调色板中保留尽可能多的alpha通道信息 然而,我发现这一职能的结果根本没有适当地保持任何透明度。我用文本叠加在上面作为测试,所有的功能都给了我一个白色背景和奇怪的深蓝色边框。我知道我不能希望保留完整的alpha通道,但
然而,我发现这一职能的结果根本没有适当地保持任何透明度。我用文本叠加在上面作为测试,所有的功能都给了我一个白色背景和奇怪的深蓝色边框。我知道我不能希望保留完整的alpha通道,但肯定这个函数至少会在透明的背景上起作用。有什么我遗漏的吗?我可以采取其他方法吗?看看php文档中的内容-我想这就是您想要的。我最近遇到了类似的情况-我只能通过使用以下方法来实现透明度:
imagesavealpha($im, true);
imagecolortransparent($im, imagecolorat($im,0,0));
我知道在所有的图像中,左上角的像素是背景色。
这些是在imagetruecolortopalette之后和imagepng之前调用的。我能够通过在
imagetruecolortopalette之前保存像素来保持透明度
function check_transparent($im) {
$width = imagesx($im);
$height = imagesy($im);
$pixels = array();
for($i = 0; $i < $width; $i++) {
for($j = 0; $j < $height; $j++) {
$rgba = imagecolorat($im, $i, $j);
$index = imagecolorsforindex($im, $rgba);
if($index['alpha'] == 127) {
$pixels[] = array($i, $j);
}
}
}
return $pixels;
}
作为
使用此功能关闭alpha通道无法正确地将图片中以前透明的部分转换为透明颜色。我尝试了此功能,它看起来不错,但由于某种原因,我(WAMP)安装的PNG最终完全乱码。我还尝试将真彩色转换为调色板256 PNG图像,同时保留单个alpha颜色。抱歉,似乎在Corel PhotoPaint中打开此结果时看起来只是垃圾,而Photoshop看起来很好(包括透明度)。
function replacePixels($im,$pixels){
$color = imagecolorallocatealpha($im, 0, 0, 0, 127);
foreach($pixels as $pixel)
imagesetpixel($im, $pixel[0], $pixel[1], $color);
}
$tpixels = check_transparent($image);
imagetruecolortopalette($image, true, 255);
replacePixels($image, $tpixels);