【问题标题】:How to anti-alias an image with PHP? [duplicate]如何使用 PHP 对图像进行抗锯齿处理? [复制]
【发布时间】:2012-12-18 06:55:30
【问题描述】:

可能重复:
Remove white background from an image and make it transparent

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

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

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

【问题讨论】:

  • 你的代码中没有画任何东西,会不会是原图中的粗边,只是因为没有深色背景而看不到?
  • @AndreKR 我的代码从我服务器上的特定 PNG 图像中删除了白色背景,并使白色背景透明。但是,输出边缘非常粗糙,我想知道是否有办法让它更平滑。
  • 您可能会从我在这里的回答或同一问题的其他回答中得到一两个提示:stackoverflow.com/a/8042272/5987

标签: php function antialiasing


【解决方案1】:

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

【讨论】:

  • 也许用一种特殊的颜色进行泛光填充,去除所有其他颜色,模糊生成的蒙版并覆盖它以平滑边缘。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 2021-03-05
    • 2013-10-03
    • 2018-08-10
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多