PHP + GD:imagetruecolortopalette不保持透明度

问题描述 投票:3回答:3

我正在使用GD输出一个图像,这是一个真彩色+ alpha通道PNG文件使用imagepng就好了。但是,我希望能够同时输出ie6兼容的256色PNG。根据imagetruecolortopalette的官方文档:

除了尽可能保留颜色之外,代码已经过修改,以在生成的调色板中保留尽可能多的alpha通道信息。

但是,我发现这个函数的结果根本没有保留任何透明度。我使用this firefox image将文本叠加在它上面作为测试,所有功能都给了我一个白色背景和一个奇怪的深蓝色边框。我知道我不能希望保留完整的alpha通道,但肯定这个功能至少可以在透明背景上进行。有什么我想念的吗?我可以选择其他方法吗?

php png gd
3个回答
3
投票

我最近遇到过这样的事情 - 我只能通过以下方式获得透明度:

imagesavealpha($im, true);
imagecolortransparent($im, imagecolorat($im,0,0));

我知道在所有图像中,左上角的像素将是背景颜色。这些是在图像真彩色调色板之后和imagepng之前调用的。


0
投票

看一下php文档中的imagesavealpha - 我认为这就是你要找的东西。


0
投票

通过在qazxsw poi之前保存像素,我能够保持透明度

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;
}

function replacePixels($im,$pixels){
  $color = imagecolorallocatealpha($im, 0, 0, 0, 127);
  foreach($pixels as $pixel)
      imagesetpixel($im, $pixel[0], $pixel[1], $color);
}
© www.soinside.com 2019 - 2024. All rights reserved.