如何使用 Imagemagick 自動修剪同時保留小邊框?

如何使用 Imagemagick 自動修剪同時保留小邊框?

我有大量文件,其中有黑色毛氈背景上的硬幣圖片。使用 ImageMagick,我可以使用 -trim 和 -fuzz 相當簡單地自動修剪這些圖像。

邊緣檢測運作良好,我想找到一個參數,讓我可以說“找到邊緣,然後備份 10 像素”,也就是說,保留硬幣周圍 10 像素的周長,而不是直接裁剪它。我不想像使用 -splice 指令那樣新增邊框,而是保留與原始影像的間距。

到目前為止,我還沒有找到一種方法來做到這一點,我想出的最接近的方法是在-trim info:- 模式下運行它,捕獲輸出並使用手動裁剪重新計算裁剪,但我真的更喜歡一步過程。

我在 Windows 10 下使用 ImageMagick,雖然我已經安裝了 bash 擴展,但我尚未在其下測試任何腳本,因此首選純粹使用 Imagemagick 命令行的解決方案。

答案1

由於缺乏優雅的解決方案,我選擇了一個可行的解決方案,並編寫了一個粗略的 bash 腳本,似乎可以很好地完成這項工作。這會在硬幣周圍留下 25 像素的偏移,使用原始圖形提供背景。我最終將參數化它並清理它,但它是今天的工作腳本。

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

相關內容