imagemagick:如何使用抗锯齿功能更改图像的背景颜色

imagemagick:如何使用抗锯齿功能更改图像的背景颜色

狐狸

我只想保留狐狸。也就是说,使用 imagemagick 将图像的白色背景颜色更改为透明。

抗锯齿效果不好,图像边缘呈锯齿状。

我试过了。

代码如下:

convert fox.jpeg -alpha set -channel RGBA \
-fill none -opaque white fox_one.jpeg 

convert fox.jpeg -matte -fill none \
-draw 'color 0,0 replace' fox_two.jpeg

两者都失败了

在此处输入图片描述

我按照color_basics/#replace

有没有推荐的更准确的文档?如何修复?

答案1

很遗憾,与您之前关于图标的问题不同,对于更复杂的图像,有很多方法可以去除背景……因此可能没有单一的“好”解决方案。话虽如此,对于您发布的示例,以下是一些可能更令人满意的方法。


虽然我在下面给出了建议,但可能还有更好的方法可以做我目前不知道的事情。请原谅任何错误、遗漏或我可能忽略的事情。=)


简单单色透明度

要将单一颜色(例如背景)转换为透明,您可以使用:

convert fox.jpg -transparent white fox_transparent.png

但是,这会产生与您的不良图像相同的结果,这是不可取的:

例如 fox_transparent

fox_transparent_nofuzz

这是因为白色区域(上图)并不是真正的白色(它们是灰白色,主要是由于抗锯齿,正如您所指出的那样)。要解决这个问题,一个可能的选项是使用-模糊选择像素几乎(几乎)白色:

convert fox.jpg -fuzz 11% -transparent white fox_transparent_fuzzed.png

这会产生更好的结果:

例如 fox_transparent_fuzzed

fox_transparent_fuzzed


更好的边缘(?)

虽然简单使用-fuzz可能效果很好,但仍然可能存在不良的粗糙度:

例如 fox_transparent_fuzzed - 粗糙边缘

fox_transparent_fuzzed_jaggies

为了解决这个问题,我们可以使用面具模糊处理有助于柔化图像边缘。要一步完成此操作,我们可以从这个论坛帖子中获取一些代码像这样使用它:

convert fox.jpg ( -clone 0 -fuzz 11% -transparent white -blur 0x1 ) -compose copy_opacity -composite fox_transparent_fuzzed_blurry_mask.png

此命令会创建一个模糊蒙版,然后将其与原始图像合成。结果如下:

例如 fox_transparent_fuzzed_blurry_mask

fox_transparent_fuzzed_blurry_mask

您可以看到边缘现在变得更柔和了:

fox_transparent_fuzzed_nojaggies

如果有必要,我们可以分两步做类似的事情:

convert fox.jpg -type Grayscale -negate -fill white -fuzz 11% +opaque "#000000" -blur 0x1 fox_blur_mask.jpg
convert fox.jpg fox_blur_mask.jpg -compose copy_opacity -composite fox_transparent_blur_mask_result.png

第一个命令:

  • 创建图像的黑白版本 ( -type Grayscale)。

  • (有效)反转颜色以达到遮罩效果(-否定)。

  • 用来用-fill white -fuzz 11% +opaque "#000000"白色填充狐狸的头部(这样我们就可以看到原始图像的大部分)。

  • -blur 0x1对图像应用光照。

这是制作好的面具,最终图像中的一切都变成了透明的:

例如 fox_blur_mask

fox_blur_mask

第二条命令只是将原始图像和蒙版组合在一起以获得以下结果:

例如 fox_transparent_blur_mask_result

fox_transparent_blur_mask_result

您会注意到结果几乎与前面给出的“全部一起”示例相同:

fox_transparent_fuzzed_blurry_mask fox_transparent_blur_mask_result


注意事项

  • 正如前面提到的,给出的建议并不是完成事情的唯一方法,并且可能存在给出的命令的替代/更好的版本。

  • 这些示例假设原始图像中没有透明度。如果有,您可能需要使用不同的选项/命令。同样,这些建议仅在使用 .jpg 文件作为输入格式和 .png 文件作为输出格式的情况下进行了测试。

  • 的基本缺点-fuzz是难以以一致的方式应用。-fuzz 11%最适合示例图像。-fuzz 10%或者fuzz 12%可能会留下不需要的杂散像素。其他-fuzz图像可能需要其他值。

  • 这些建议并未提及任何使图像中某些部分的颜色与背景颜色相同的方法(例如狐狸的白眼)。为此,您可能想要 A) 更改最后一个示例中的蒙版,或者 B) 如果您想要类似顶部第二个示例的内容,请使用例如

    convert fox.jpg -bordercolor white -border 1x1 -fuzz 11% -fill none -floodfill +0+0 white -shave 1x1 fox_flood_2_minimal.png
    
  • 请注意,上面的命令是从掩蔽链接已提供。

相关内容