如何使用ImageMagick基于指定颜色(#31393C)的矩形边框裁剪图片
解决方案
问题根因
你之前的方案无效是因为-trim默认仅裁剪图片边缘的同色区域,无法定位并裁剪图片内部的指定颜色边框外的内容。
单张图片处理命令
通过颜色转换提取边框区域的裁剪坐标,直接裁剪原图,适配压缩导致的边框颜色偏差:
# 提取#31393C边框对应的裁剪坐标 crop_area=$(convert input.jpg -fuzz 15% -fill black -opaque "#31393C" -fill white +opaque black -format "%@" info:) # 用坐标裁剪原图,清除画布残留信息 convert input.jpg -crop $crop_area +repage output.jpg
如果需要同时优化OCR识别效果,填充边框外非文本区域为白色,使用以下命令:
convert input.jpg \ \( +clone -fuzz 15% -fill black -opaque "#31393C" -fill white +opaque black -format "%@" info: \) \ -crop "$(cat <&0)" +repage \ -fill white -fuzz 12% +opaque "#000000" \ output.jpg
批量处理所有jpg图片
for img in *.jpg; do crop_area=$(convert "$img" -fuzz 15% -fill black -opaque "#31393C" -fill white +opaque black -format "%@" info:) convert "$img" -crop $crop_area +repage "cropped_${img}" done
参数调整说明
- 边框识别不全时,将
-fuzz后的数值适当调大(最高不超过25%) - 误裁边框内部内容时,将
-fuzz后的数值适当调小 - 需保留原边框时,在裁剪命令末尾添加
-bordercolor "#31393C" -border 1x1即可
内容的提问来源于stack exchange,提问作者Alvie Mahmud
相关产品推荐
相关产品推荐

