Imagecolortransparent() 用于多种颜色

Imagecolortransparent() for multiple colors

我使用此代码使所有白色像素透明:

$img = imagecreatefromjpeg('test.jpg');
$remove = imagecolorallocate($img, 255, 255, 255);
imagecolortransparent($img, $remove);
imagepng($img, 'bla.png');

但我还希望一些 "almost white" 像素是透明的,例如 254, 255, 255 等。我该如何添加?

如果您的问题是如何删除具有相似颜色范围的连续区域;我必须说很难使用 PHP 的 GD 库。你应该看看 ImageMagick which is a much more powerful image processing library and has PHP integration

如果您选择使用 ImageMagick,您将可以访问许多第三方脚本,这些脚本可以进行出色的图像处理。其中之一是 Fred Weinhaus 的 MagicWand。它可以满足您的需求。

你用 xy 坐标作为种子,它可以提取该坐标的颜色并使用可配置的颜色差异阈值(模糊因子)使其透明。看看它如何匹配蓝色渐变:

我遇到了同样的问题。带有黑白图像。但是白色不是很白。所以在设置透明度之前,我做了一个过滤器来增加对比度。我有一个真正的黑色和真正的白色图像。当我在白色上使用透明度时,效果很好。

过滤器示例:

imagefilter($src,IMG_FILTER_CONTRAST,-50);