使用以百分比给出的 imagemagick 偏移量裁剪图像
Posted
技术标签:
【中文标题】使用以百分比给出的 imagemagick 偏移量裁剪图像【英文标题】:crop image with imagemagick offset given in percentage 【发布时间】:2019-10-08 16:03:27 【问题描述】:imagemagick 的裁剪命令支持cropping to a percentage of an image,但偏移值必须以像素值指定,例如:
convert image.png -crop 50%x+10+20
我想用偏移值x
和y
分别以图像宽度和高度的百分比给出裁剪。可以计算像素值,例如,如果图像大小为100x200
,则 10% 的偏移量将分别导致 10 和 20。是否可以将此计算作为调用convert
的一部分?宽度和高度在某些地方可以使用%w
和%h
,但这不起作用:
convert image.png -crop 50%x+(0.1*%w)+(0.1*%h)
【问题讨论】:
【参考方案1】:如果您正在运行 IM v6,您可以使用带有“-set”的 FX 表达式来设置图像属性。通过设置页面几何图形,您可以将偏移量指定为计算出的百分比并像这样进行裁剪...
convert image.png -set page -%[fx:w*0.1]-%[fx:h*0.1] -crop 50%x+0+0 result.png
读取图像,将左上角的几何设置为原始画布之外的位置,然后裁剪到几何指定的新左上角。
注意偏移量是负数。
此外,如果您在同一命令中进行其他处理,您可能希望在裁剪后“+repage”,以便将页面几何形状重置为新的 WxH+0+0。
编辑添加:使用“-set page”时,您甚至可以包括裁剪的宽度和高度尺寸。此命令将裁剪输入宽度和高度的 50% 的输出,并从左侧和顶部的 10% 开始...
convert image.png \
-set page %[fx:w*0.5]x%[fx:h*0.5]-%[fx:w*0.1]-%[fx:h*0.1] -crop +0+0 result.png
请注意裁剪操作是如何简单地“-crop +0+0”,因为尺寸和偏移量在页面几何中。
此方法让您可以使用更复杂的计算,而不仅仅是使用百分比或像素数来裁剪输出尺寸。
【讨论】:
【参考方案2】:你不能在 ImageMagick 6 中做到这一点。但你可以在 ImageMagick 7 中做到这一点。
magick image.png -crop "50%x+%[fx:0.1*w]+%[fx:0.1*h]" +repage result.png
在 ImageMagick 6 中,您需要在命令之前进行计算,将它们存储在一个变量中并在裁剪命令中使用该变量。
但是,在 ImageMagick 6 中,您可以使用 -distort 和视口处理进行等效操作,如下所示:
convert image.png -set option:distort:viewport "%[fx:0.5*w]x%[fx:0.5*h]+%[fx:0.1*w]+%[fx:0.1*h]" -filter point -distort SRT 0 result.png
【讨论】:
【参考方案3】:使用 v7 ImageMagick,制作起始图片:
magick -size 200x100 gradient: a.jpg
现在使用大量计算出的宽度、高度、偏移量进行裁剪:
magick a.jpg -crop "%[fx:w*0.9]x%[fx:h*0.8]+%[fx:w*0.1]+%[fx:h*0.05]" b.png
检查:
identify b.png
b.png PNG 180x80 200x100+20+5 8-bit Gray 256c 408B 0.000u 0:00.000
如果您只有 v6,请使用 bash
和整数运算:
read w h < <(identify -format "%w %h" a.jpg)
convert a.jpg -crop $((w*80/100))x$((h*90/100))+$((w*10/100))+$((h*5/100)) result.png
检查:
identify result.png
result.png PNG 160x90 200x100+20+5 8-bit Gray 256c 412B 0.000u 0:00.000
【讨论】:
以上是关于使用以百分比给出的 imagemagick 偏移量裁剪图像的主要内容,如果未能解决你的问题,请参考以下文章
ImageMagick:将图像转换为 A4 页面大小的 PDF,图像适合页面