0

可能重复:
从图像中删除白色背景并使其透明

我目前有一个从图像中删除白色背景的代码,它看起来像这样:

function transparent_background($filename, $color) 
{
    $img = imagecreatefrompng($_SERVER['DOCUMENT_ROOT'].'/'.$filename);
    $colors = explode(',', $color);
    $remove = imagecolorallocate($img, $colors[0], $colors[1], $colors[2]);
    imagecolortransparent($img, $remove);
    imagepng($img, $_SERVER['DOCUMENT_ROOT'].'/'.$filename);
}

transparent_background('test.png', '255,255,255');

但是,一旦出口,边缘就非常粗糙。这就是它的样子(请注意,这只是我的图像的一部分):

http://img211.imageshack.us/img211/97/2125c773e32c432b91e1127.png

我在该图像后面添加了黑色背景以更好地显示边缘。那么有没有办法可以在函数中添加一条线或编辑函数以使边缘更平滑/抗锯齿?谢谢!

4

2 回答 2

1

没有简单的方法可以做到这一点。原始图像的边缘被抗锯齿到白色背景。当你去除纯白色时,你会在边缘附近留下很多接近白色的像素。当您在深色背景下看到这些像素时,它们会突出并看起来“粗糙”。如果源图像中没有透明背景,您将无法获得平滑的边缘。

于 2013-01-03T20:53:29.770 回答
0

输出的最终结果取决于您正在导入的图像的初始图像质量。PHP 只能对在图像上绘制的元素进行抗锯齿处理。

一种解决方案,一种完全的大锤方法,将向上重新采样图像,然后再次向下采样。您的结果会因所讨论的图像而异,而且几乎总是不好。

针对您的特定问题的最佳解决方案是首先使用质量更好的导入图像。

于 2013-01-03T20:50:23.403 回答