我正在尝试创建一个函数,该函数接收一个PNG图像并返回其反色图像。然而,我在透明度/Alpha通道方面遇到了问题:基本上,透明像素会变成黑色或白色,因此无法保留透明度。
这是源图像的示例(当然会有所不同),它具有透明背景的PNG:
我想要反转这些颜色,同时保留透明度/alpha通道,就像Photoshop中的CTRL+I一样。我使用GD的imagefilter函数和IMG_FILTER_NEGATE参数。
代码如下:
但它生成的图片如下所示:
你可以看到,透明像素变成了黑色。于是我尝试在函数imagecreatefrompng中添加alpha通道(像这个一样):
但是现在我得到的是白色而不是黑色:
现在,问题似乎是在应用
这是源图像的示例(当然会有所不同),它具有透明背景的PNG:
我想要反转这些颜色,同时保留透明度/alpha通道,就像Photoshop中的CTRL+I一样。我使用GD的imagefilter函数和IMG_FILTER_NEGATE参数。
代码如下:
$im = imagecreatefrompng($image_file);
imagefilter($im, IMG_FILTER_NEGATE);
header('image/png');
imagepng($im,NULL,0);
但它生成的图片如下所示:
![enter image description here](https://istack.dev59.com/WFFtw.webp)
$im = imagecreatefrompng($image_file);
imagealphablending($im, false);
imagesavealpha($im, true);
imagefilter($im, IMG_FILTER_NEGATE);
header('image/png');
imagepng($im,NULL,0);
但是现在我得到的是白色而不是黑色:
![enter image description here](https://istack.dev59.com/ntjuc.webp)
imagefilter
函数后出现的。例如,如果我运行以下代码:$im = imagecreatefrompng($image_file);
imagealphablending($im, false);
imagesavealpha($im, true);
//imagefilter($im, IMG_FILTER_NEGATE);
header('image/png');
imagepng($im,NULL,0);
输出的图像保留其透明背景,同时与原始图像完全相同。
如何反转透明PNG的颜色而不失去透明背景?
注意:这个问题与“imagecreatefrompng()会产生黑色背景而不是透明背景”不同-反转步骤是棘手的部分。