我只想保留狐狸。也就是说,使用 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
两者都失败了
有没有推荐的更准确的文档?如何修复?
答案1
很遗憾,与您之前关于图标的问题不同,对于更复杂的图像,有很多方法可以去除背景……因此可能没有单一的“好”解决方案。话虽如此,对于您发布的示例,以下是一些可能更令人满意的方法。
虽然我在下面给出了建议,但可能还有更好的方法可以做我目前不知道的事情。请原谅任何错误、遗漏或我可能忽略的事情。=)
简单单色透明度
要将单一颜色(例如背景)转换为透明,您可以使用:
convert fox.jpg -transparent white fox_transparent.png
但是,这会产生与您的不良图像相同的结果,这是不可取的:
例如 fox_transparent
这是因为白色区域(上图)并不是真正的白色(它们是灰白色,主要是由于抗锯齿,正如您所指出的那样)。要解决这个问题,一个可能的选项是使用-模糊选择像素几乎(几乎)白色:
convert fox.jpg -fuzz 11% -transparent white fox_transparent_fuzzed.png
这会产生更好的结果:
例如 fox_transparent_fuzzed
更好的边缘(?)
虽然简单使用-fuzz
可能效果很好,但仍然可能存在不良的粗糙度:
例如 fox_transparent_fuzzed - 粗糙边缘
为了解决这个问题,我们可以使用面具模糊处理有助于柔化图像边缘。要一步完成此操作,我们可以从这个论坛帖子中获取一些代码像这样使用它:
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
您可以看到边缘现在变得更柔和了:
如果有必要,我们可以分两步做类似的事情:
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_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
请注意,上面的命令是从掩蔽链接已提供。