如何使用ImageMagick裁剪图片空白区域并保留内边距?
解决ImageMagick Trim后保留内边距的问题
要实现去除空白区域同时保留指定内边距(不添加彩色边框,直接从原图裁剪扩展区域),可以通过先获取Trim区域的位置和尺寸,再计算扩展内边距后的裁剪范围来完成。
基础实现(内边距不超出原图范围时使用)
假设需要保留10px内边距,执行以下命令:
convert input.png -set option:trim:percent-background 0% -trim +repage \ -set option:new_width "%[fx:w+20]" -set option:new_height "%[fx:h+20]" \ -set option:new_x "%[fx:page.x-10]" -set option:new_y "%[fx:page.y-10]" \ -crop %[new_width]x%[new_height]+%[new_x]+%[new_y] +repage output.png
参数说明:
-set option:trim:percent-background 0%:确保Trim完全识别空白背景(若空白非纯透明/纯白,可调整此值)-trim +repage:裁剪到内容边缘,同时记录原裁剪偏移量(page.x/page.y)w+20/h+20:原Trim后的宽高加上2倍内边距(左右/上下各10px)page.x-10/page.y-10:将裁剪起始位置往回偏移10px,实现内边距效果-crop:根据计算的新范围从原图裁剪,+repage重置画布信息
安全版(防止内边距超出原图范围)
如果内边距设置过大,可能导致裁剪范围超出原图边界,此时可以加入范围限制:
convert input.png -set option:orig_w "%[w]" -set option:orig_h "%[h]" \ -set option:trim:percent-background 0% -trim +repage \ -set option:pad 10 \ -set option:new_x "%[fx:max(0, page.x-%[pad])]" \ -set option:new_y "%[fx:max(0, page.y-%[pad])]" \ -set option:new_w "%[fx:min(%[orig_w], page.x-%[pad] + w + 2*%[pad])]" \ -set option:new_h "%[fx:min(%[orig_h], page.y-%[pad] + h + 2*%[pad])]" \ -crop %[new_w]x%[new_h]+%[new_x]+%[new_y] +repage output.png
只需要修改-set option:pad 10中的10即可调整内边距大小,命令会自动确保裁剪范围不超出原图尺寸。
内容的提问来源于stack exchange,提问作者mdcq
相关产品推荐
相关产品推荐

