首页 > 解决方案 > 使用图像魔法从图像中删除背景(任何颜色)

问题描述

嗨,我参考这个问题问这个问题在 ImageMagic php 中模糊洪水填充 - 制作透明图像

 #!/bin/bash

# Get size of original
sz=$(convert -format "%wx%h" phone.png info:)

# Floodfill background area with transparency
convert phone.png -fuzz 5% -fill none -draw 'color 0,0 floodfill' ObjectOnTransparent.png

# Extract alpha channel
convert ObjectOnTransparent.png -alpha extract Alpha.png

# Extract edges of alpha channel - experiment with thickness
convert Alpha.png -edge 1 AlphaEdges.png

# Get difference from background for all pixels
convert phone.png \( +clone -fill white -colorize 100% \) -compose difference -composite Diff.png

# Multiply edges with difference, so only edge pixels will have a chance of getting through to final mask
convert AlphaEdges.png Diff.png -compose multiply -composite EdgexDiff.png

# Extend Alpha by differences at edges
convert Alpha.png EdgexDiff.png -compose add -composite ReEdgedAlpha.png

# Apply new alpha to original image
convert phone.png \( ReEdgedAlpha.png -colorspace gray \) -compose copyopacity -composite RemaskedPhone.png

# Splat RemaskedPhone over red background
convert -size $sz xc:red RemaskedPhone.png -composite Result.png

我运行了这些脚本,它在白色背景的图像上运行准确,并且产生了干净的边缘,但我想问一下是否有任何方法可以从图像中删除任何颜色背景,例如 https://ibb。 co/BNWnNBs 我想从中删除图像角落的黑色,例如https://ibb.co/x7nD8Vb

任何帮助表示感谢

标签: image-processingimagemagick

解决方案


这适用于我在 Unix 语法的 ImageMagick 6 中。

输入:

在此处输入图像描述

convert eagle.png -alpha off -fuzz 10% -fill none -draw "matte 0,0 floodfill"  \
\( +clone -alpha extract -blur 0x2 -level 50x100% \) \
-alpha off -compose copy_opacity -composite \
eagle_transp.png

结果:

在此处输入图像描述

Windows 语法为:

转换 eagle.png -alpha off -fuzz 10% -fill none -draw "matte 0,0 floodfill" ^ ( +clone -alpha extract -blur 0x2 -level 50x100% ) ^ -alpha off -compose copy_opacity -composite ^ eagle_transp. PNG

如果在 .bat 脚本中,将 % 加倍为 %%


推荐阅读