使用gdlib复制透明PNG

时间:2012-09-24 14:58:17

标签: php tinymce png transparency gdlib

我目前在使用TinyMCE的Archiv-Plugin时遇到了问题。上传图片时,会为其创建缩略图。但对于透明的PNG来说,背景是黑色的。我想,好吧,要添加功能以保持透明度,但毕竟它不起作用。我还在stackoverflow上阅读了所有PHP文档和问题/答案,但它们对我没有帮助。

我已将问题简化为几行代码。这并没有真正创建缩略图但具有相同的问题:所有具有透明背景的PNG之后都有黑色背景:

$thumb = imagecreatefrompng($originalPath);     
imagesavealpha($thumb, true);
imagealphablending($thumb, false);
imagepng($thumb, $thumbPath, 0);

当我创建一个新的空图像并使用transpareny填充它时,它可以工作。但是当从任何现有的透明PNG创建它时它会失败。我想念一下吗?

如果无法快速解决,我会将Archiv-Plugin扩展为可选地使用ImageMagick ......

2 个答案:

答案 0 :(得分:1)

上周我也遇到了这个问题。经过几个小时的搜索和研究,我认为这里可以解释问题。

首先,PNG有几种格式类型:基于调色板的png和truecolor png。此外,有三种方法可以实现透明的PNG。

  1. 带有透明度标志的基于调色板的PNG
  2. 带有透明度标志的Truecolor(RGB)PNG
  3. 带alpha通道的Truecolor PNG(RGBA格式)
  4. 这就是为什么有时你的代码正常工作,有时你的代码运行不好的原因。文章Transparency Concept in PNG详细解释了这三种类型中的不同。

    我已经尝试过您的代码了。当您的源png图像是带alpha通道的truecolor PNG时,它将完美地工作。否则,输出图像的透明度部分将为黑色。

    这是两个png图像。底部带有黑色区域的是2型格式。另一个是RGBA格式。

    enter image description here enter image description here

答案 1 :(得分:0)

别担心安德烈亚斯,你的剧本运作良好,我只是测试了它。

我想您可以查看您正在使用的PHP的GD版本。我有GD版本2.