使用以百分比给出的 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

我想用偏移值xy 分别以图像宽度和高度的百分比给出裁剪。可以计算像素值,例如,如果图像大小为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,图像适合页面

MySql 限制和偏移量给出错误的结果

如何在 Python NLTK 中提取 WordNet 同义词集的偏移量并给出同义词集?

使用 ImageMagick 创建的偏移堆叠图像

使用偏移量计算 JavaScript 日期时间