以百分比为单位指定imagemagick偏移的裁剪图像

以百分比为单位指定imagemagick偏移的裁剪图像,imagemagick,imagemagick-convert,Imagemagick,Imagemagick Convert,imagemagick的裁剪命令支持,但偏移值必须在像素值中指定,例如: 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) 使用v7Image

imagemagick的裁剪命令支持,但偏移值必须在像素值中指定,例如:

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)

使用v7ImageMagick,制作开始图像:

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
identify result.png
result.png PNG 160x90 200x100+20+5 8-bit Gray 256c 412B 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

在ImageMagick 6中不能这样做。但你可以在ImageMagick 7中做到这一点

magick image.png -crop "50%x+%[fx:0.1*w]+%[fx:0.1*h]" +repage result.png

在ImageMagick 6中,您需要在命令之前进行计算,将其存储在变量中,然后在crop命令中使用该变量

但是,在ImageMagick 6中,可以使用-扭曲和视口处理进行等效处理,如下所示:

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


如果您正在运行imv6,则可以使用带有“-set”的FX表达式来设置图像属性。通过设置页面几何图形,可以将偏移指定为计算出的百分比,并按如下方式进行裁剪

convert image.png -set page -%[fx:w*0.1]-%[fx:h*0.1] -crop 50%x+0+0 result.png
读取图像,将左上角的几何体设置为原始画布之外的位置,然后裁剪到几何体指定的新左上角

注意偏移量是负数

此外,如果使用同一命令执行其他处理,则可能需要在裁剪后“+重新分页”,以便将页面几何图形重置为新的WxH+0+0

编辑以添加:使用“-设置页面”时,您甚至可以包括裁剪的宽度和高度尺寸。此命令将裁剪输入宽度和高度的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”的,因为尺寸和偏移位于页面几何图形中

此方法允许您使用比仅使用剪切输出尺寸的百分比或像素数更复杂的计算