PHP+;GD:imagetruecolortopalette未保持透明度

PHP+;GD:imagetruecolortopalette未保持透明度,php,png,gd,Php,Png,Gd,我正在使用GD输出一个图像,它是一个使用imagepng的truecolor+alpha通道PNG文件。然而,我想有能力也输出一个ie6兼容的256色PNG以及。根据imagetruecolortopalette的官方文档: 除了尽可能地保留颜色外,还对代码进行了修改,以在生成的调色板中保留尽可能多的alpha通道信息 然而,我发现这一职能的结果根本没有适当地保持任何透明度。我用文本叠加在上面作为测试,所有的功能都给了我一个白色背景和奇怪的深蓝色边框。我知道我不能希望保留完整的alpha通道,但

我正在使用GD输出一个图像,它是一个使用imagepng的truecolor+alpha通道PNG文件。然而,我想有能力也输出一个ie6兼容的256色PNG以及。根据imagetruecolortopalette的官方文档:

除了尽可能地保留颜色外,还对代码进行了修改,以在生成的调色板中保留尽可能多的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);