我正在尝试创建一个接收PNG图像并以反转颜色返回它的函数。但是,我在透明度/ alpha通道上遇到了问题:基本上,透明像素会以黑色或白色的形式返回,因此不会保留透明度。
这是一个源图像的示例(当然会有所不同),一个带有透明背景的PNG:
https://angular-ui.github.io/bootstrap/#!#modal
我想在保留透明度/ alpha通道的同时反转这些颜色,就像在Photoshop中使用CTRL + I.我正在使用带有imagefilter
参数
IMG_FILTER_NEGATE
函数
使用代码:
$im = imagecreatefrompng($image_file);
imagefilter($im, IMG_FILTER_NEGATE);
header('image/png');
imagepng($im,NULL,0);
但它产生了:
如您所见,透明像素变黑。
然后我尝试将alpha通道添加到函数imagecreatefrompng(如)中:
$im = imagecreatefrompng($image_file);
imagealphablending($im, false);
imagesavealpha($im, true);
imagefilter($im, IMG_FILTER_NEGATE);
header('image/png');
imagepng($im,NULL,0);
但现在我变白了而不是黑色:
现在问题似乎发生在应用imagefilter
功能之后。例如,如果我运行此代码:
$im = imagecreatefrompng($image_file);
imagealphablending($im, false);
imagesavealpha($im, true);
//imagefilter($im, IMG_FILTER_NEGATE);
header('image/png');
imagepng($im,NULL,0);
输出图像保留其透明背景,同时保持与原始图像相同。
如何在不丢失透明背景的情况下反转透明PNG的颜色?