php - 使用 gdlib 复制透明 PNG

标签 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);

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

如果不能快速解决这个问题,我将扩展 Archiv-Plugin 以可选地使用 ImageMagick...

最佳答案

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

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

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

这就是为什么有时您的代码可以正常工作而有时您的代码不能正常工作的原因。文章Transparency Concept in PNG详细解释了这三种类型的不同。

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

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

enter image description here enter image description here

关于php - 使用 gdlib 复制透明 PNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12567633/

相关文章:

html - tinyMCE - 在移动设备上移动图像并调整其大小

c# - 如何使用 C# 组合一组 png 图像,如图层?

python - 使用 Python 读取 16 位 PNG 图像文件

php - 正在上传的文件首字母被截断

PHP 和 HTML CSS 标签

php - 如何使用 Codeigniter 编辑记录

javascript - tinymce核心功能操作

php - 仅上传具有特定扩展名的文件

javascript - 在模态窗口中使用 tinyMCE

php - 如何在单个 HTML/PHP 文件中嵌入图像?