我正在使用透明颜色去除背景颜色的脚本。ImageMagic php中的模糊洪水填充 - 制作透明图像
剧本是这样的,并给出了确定的结果,区分紫红色。
$val = 65535/40;
//divide by fuzz dilution, 1 is none
$val = floatval($val/0.9);
//create white border
$image->borderImage ("rgb(255,255,255)" , 1 , 1);
//make all white fill fuchsia
$image->floodFillPaintImage ("rgb(255, 0, 255)" ,$val*3, "rgb(255,255,255)", 0 , 0, false);
//make fuchsia transparent
$image->paintTransparentImage("rgb(255,0,255)", 0.0, 0.5);
//remove border 1px that was added above
$image->shaveImage (1 , 1);
但是,它留下了图像周围颜色的痕迹。这里有一个例子,当我试图去除白色背景的电话周围的边框 - 你可以清楚地看到边缘的白色痕迹。
的问题是 - 做一个洪水填补像素0,0时,背景色被着色错了,我需要一个“模糊”的油漆桶填充功能。 Imagemagic为floodFillPaintImage提供了“模糊”算法,但“模糊”部分的参数仅用作像素的选择,而不是模糊着色。
例如,我有一个100%的白色 - 算法正确选择完美的白色背景,并填充一个新的完美紫红色图像。当你设置一个“模糊”参数,算法正确选择 80%的白色像素(例如),但它再次以100%紫红色着色。这就是出现丑角的问题。
ImageMagic支持像“真”模糊泛滥填充和“真实”模糊paintTransparentImage?或者有人对如何解决这个问题有更好的想法?
非常感谢你的帮助,它确实帮助我得到的问题开始。然而,EdgexDiff.png有时会产生边框,这些边框对于某些图像来说太薄。这绝对比我原始的方法好,但仍然不是很好 – user151496