3

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

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

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

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

如果这不能快速解决,我将扩展存档插件以可选地使用 ImageMagick ...

4

2 回答 2

1

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

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

  1. 带有透明度标志的基于调色板的 PNG
  2. 带有透明度标志的真彩色 (RGB) PNG
  3. 带 alpha 通道的真彩色 PNG(RGBA 格式)

这就是为什么有时您的代码可以正常工作而有时您的代码不能正常工作的原因。PNG中的透明概念一文详细解释了这三种类型的不同之处。

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

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

在此处输入图像描述 在此处输入图像描述

于 2015-01-18T06:23:00.460 回答
0

别担心 Andreas,你的脚本运行良好,我刚刚测试过。

我想你可以检查你正在使用的 PHP 的 GD 版本。我有 GD 版本 2。

于 2012-09-25T12:40:27.820 回答