如何使用 Imagemagick 自动修剪同时保留小边框?

如何使用 Imagemagick 自动修剪同时保留小边框?

我有大量文件,其中有黑色毡布背景上的硬币图片。使用 ImageMagick,我可以使用 -trim 和 -fuzz 相当直接地自动修剪这些图像。

边缘检测运行良好,我想找到一个参数,让我能够说“找到边缘然后后退 10 个像素”,即在硬币周围保留 10 个像素的周长,而不是直接裁剪它。我不希望像使用 -splice 命令那样添加新边框,而是保留与原始图像的间距。

到目前为止,我还没有找到办法来做到这一点,我想到最接近的办法是在 -trim info:- 模式下运行它,捕获输出并使用手动裁剪重新计算裁剪,但我真的更喜欢一步到位的过程。

我在 Windows 10 下使用 ImageMagick,虽然我已经安装了 bash 扩展,但我还没有在其下测试任何脚本,因此纯粹使用 Imagemagick 命令行的解决方案是首选。

答案1

由于缺乏一个优雅的解决方案,我选择了一个可行的解决方案,并编写了一个粗糙的 bash 脚本,该脚本似乎可以很好地完成工作。这会在硬币周围留下 25px 的偏移,使用原始图形来提供背景。我最终会参数化并清理它,但这是今天的工作脚本。

for f in *.jpg; do
    trimbox=$(convert $f -fuzz 25% -format "%@" info:)
    orig=$trimbox
    first=${trimbox%x*}
    trimbox=${trimbox#*x}
    second=${trimbox%%+*}
    trimbox=${trimbox#*+}
    third=${trimbox%+*}
    fourth=${trimbox#*+}
    #echo "trimbox: $orig first: $first second: $second third: $third fourth:$fourth"
    ((first+=50))
    ((second+=50))
    ((third-=25))
    ((fourth-=25))
    trimbox=$first"x"$second"+"$third"+"$fourth
    convert "$f" -crop "$trimbox" +repage "trimmed-$f"
done

答案2

您可以使用-border-bordercolor实现这一点 - 例如对于透明边框,您可能需要:

for f in *.jpg; do
  convert -fuzz 25% -trim -border 25 -bordercolor none +repage $f trimmed-$f
done

http://www.imagemagick.org/Usage/crop/#border

相关内容