我有大量文件,其中有黑色毛氈背景上的硬幣圖片。使用 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