使用以百分比给出的 imagemagick 偏移裁剪图像
crop image with imagemagick offset given in percentage
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)
使用 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 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
如果您是 运行 IM v6,您可以使用带有“-set”的 FX 表达式来设置图像属性。通过设置页面几何形状,您可以将偏移量指定为计算的百分比并像这样进行裁剪...
convert image.png -set page -%[fx:w*0.1]-%[fx:h*0.1] -crop 50%x+0+0 result.png
读取图像,将左上角的几何图形设置到原始 canvas 之外的位置,然后裁剪到几何图形指定的新左上角。
注意偏移量是负数。
此外,如果您在同一个命令中进行额外处理,您可能需要在裁剪后“+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”,因为尺寸和偏移量在页面几何中。
与仅使用百分比或像素数计算裁剪后的输出尺寸相比,此方法可让您使用更复杂的计算。
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)
使用 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 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
如果您是 运行 IM v6,您可以使用带有“-set”的 FX 表达式来设置图像属性。通过设置页面几何形状,您可以将偏移量指定为计算的百分比并像这样进行裁剪...
convert image.png -set page -%[fx:w*0.1]-%[fx:h*0.1] -crop 50%x+0+0 result.png
读取图像,将左上角的几何图形设置到原始 canvas 之外的位置,然后裁剪到几何图形指定的新左上角。
注意偏移量是负数。
此外,如果您在同一个命令中进行额外处理,您可能需要在裁剪后“+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”,因为尺寸和偏移量在页面几何中。
与仅使用百分比或像素数计算裁剪后的输出尺寸相比,此方法可让您使用更复杂的计算。