php - 使用 PHP 反转颜色并保持透明度

标签 php gd

我正在尝试创建一个函数来接收 PNG 图像并以反转的颜色返回它。但是,我在透明度/alpha channel 方面遇到了问题:基本上,透明像素返回为黑色或白色,因此不保留透明度。

这是一个源图像的示例(当然会有所不同),具有透明背景的 PNG:

enter image description here

我想在保留透明度/alpha channel 的同时反转这些颜色,就像 Photoshop 中的 CTRL+I。我正在使用带有 IMG_FILTER_NEGATE 参数的 GD imagefilter 函数

代码:

$im = imagecreatefrompng($image_file);

imagefilter($im, IMG_FILTER_NEGATE);

header('image/png');

imagepng($im,NULL,0);

但它产生:

enter image description here

如您所见,透明像素变成了黑色。

然后我尝试将 alpha channel 添加到函数 imagecreatefrompng(如 this):

$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

现在问题似乎发生在应用 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() Makes a black background instead of transparent? 相同的问题- 反转步骤是这里的棘手部分

最佳答案

以下是对我有用的方法,处理透明背景和反转图像。请注意,我使用的是 base64。

$im = imagecreatefromstring(base64_decode(str_replace('data:image/png;base64,', '', $base64)));
$width = imagesx($im);
$height = imagesy($im);
$dest_image = imagecreatetruecolor($width, $height);
imagealphablending($dest_image, FALSE);
imagesavealpha($dest_image, TRUE);
imagefilter($im, IMG_FILTER_NEGATE);
imagecopyresampled($dest_image, $im, 0, 0, 0, 0, $width, $height, $width, $height); 

//optional output back to base64 or use imagepng with destination
ob_start();
imagepng($dest_image);
$contents = ob_get_contents();
ob_end_clean();
$base64 = 'data:image/png;base64,'.base64_encode($contents);

关于php - 使用 PHP 反转颜色并保持透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44600713/

相关文章:

php - 来自目录的GD图像批处理

php - 使用PHP的GDlib imagecopyresampled时可以保留PNG图像透明度吗?

php - 是否可以指望 header() 重定向来结束程序流程?

php - mySQL 查询 - 显示最受欢迎的项目

php - 在单词拼写错误的地方打点

php - GD 创建模式

php - 在 Imagemagick 和 GD 之间选择缩略图创建

php imagecopyresampled 问题

PHP转Excel特殊字符问题

php - htaccess 命令只允许来自同一服务器的请求(不指定 IP)