2016-12-28 77 views
0

我使用此代码,使所有白色像素透明:了imagecolortransparent()为多种颜色

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

但我也需要一些“几乎白”的像素是透明的像254, 255, 255等我怎么能增加呢?

+0

尝试使用“模糊1%” –

回答

0

如果您的问题是如何去除具有相似颜色范围的连续区域;我必须说,使用PHP的GD库很困难。你应该看看ImageMagick这是一个更强大的图像处理库,并有PHP integration

如果您选择使用ImageMagick,您将可以访问很多第三方脚本,这些脚本可以完成令人惊叹的图像处理。其中之一是弗雷德Weinhaus'MagicWand。它符合你的要求。

您可以使用xy坐标进行播种,它可以提取该坐标的颜色并使其具有可配置的颜色相异阈值(模糊因子),使其透明。看看它如何能匹配的蓝色渐变:

magicwand's magic

+0

此代码只删除254,255,255。好吧,是我需要做衣服的图像的白色背景透明和去除一些特定的颜色不是很好的解决方案。首先你会建议什么? –

+1

答案提示使用“fuzz”。您想使用“模糊”值来判断颜色与需要影响的目标“透明”颜色的接近程度。在命令行中,它将是“-fuzz 1”或“-fuzz 2”。 PHP绑定当然有一些设置模糊值的等价方法。 –

+0

@AnneSchwarz:正如我所说,我的建议是使用ImageMagick来代替。另外,就我所见,该[MagicWand](http://fmwconcepts.com/imagemagick/magicwand/index.php)脚本正是您所需要的。你可以直接使用它,或者将它的某些部分移植到PHP中供自己使用。 – sepehr