使用gdlib复制透明的PNG

3

我目前遇到了TinyMCE的Archiv插件问题。上传图片时会为它们创建缩略图。但对于透明PNG,背景是黑色的。我想,好吧,我要添加保持透明度的功能,但最终并没有起作用。我还另外阅读了所有PHP文档和stackoverflow上的问题/答案,但它们都没有帮助我。

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

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

当我创建一张新的空白图像并将其填充为透明时,软件可以正常工作。但当我从任何现有的透明PNG创建时就会失败。我错过了什么吗?

如果无法快速解决此问题,我将扩展Archiv-Plugin以可选地使用ImageMagick...

2个回答

1
我上周也遇到了这个问题。经过几个小时的搜索和学习,我认为这里有一些东西可以解释这个问题。
首先,PNG有几种格式类型:基于调色板的PNG和真彩色PNG。此外,还有3种实现PNG透明度的方法。
  1. 带有透明标志的基于调色板的PNG
  2. 带有透明标志的真彩色(RGB)PNG
  3. 带有Alpha通道的真彩色PNG(RGBA格式)
这就是为什么有时您的代码能正常工作,有时候您的代码不能很好地工作的原因。文章PNG中的透明概念详细解释了这3种类型的区别。
我试过了你的代码。当你的源PNG图像是带有Alpha通道的真彩色PNG时,它将完美地工作。否则,你输出图片的透明部分将是黑色。
这里有两张PNG图片。底部有黑色区域的是第二种格式。另一张是RGBA格式。

enter image description here enter image description here


0

别担心,Andreas,你的脚本很好用,我刚刚测试过了。

我认为你可以检查一下你正在使用的 PHP 的 GD 版本。我有 GD 版本 2。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接