当前位置: 首页 > 知识库问答 >
问题:

ImageMagick:如何将图像裁剪到一定的宽高比?

吴高畅
2023-03-14

共有1个答案

海信鸥
2023-03-14

-作物3:2自2018年1月6日起工作。

magick convert in.jpg -gravity center -crop 3:2 out.jpg

警告/提醒:如果不使用-gravity center,将得到两个输出文件:

正如fmw42指出的,PNG文件存储虚拟画布大小。建议使用+repage

magick convert in.png -gravity center -crop 3:2 +repage out+repage.png
magick identify out*png
out_stndrd.png PNG 252x168 314x168+31+0 8-bit sRGB 78557B 0.000u 0:00.000
out+repage.png PNG 252x168 252x168+0+0 8-bit sRGB 78529B 0.000u 0:00.000
convert in.jpg -gravity center -crop 3:2 out.jpg
convert in. -gravity center -crop 3:2 +repage out.png
convert in.jpg -geometry 1920x1080^ -gravity center -crop 1920x1080+0+0 out.jpg
for i in *jpg
  do convert "$i" -geometry 1920x1080^ -gravity center -crop 1920x1080+0+0 out-"$i"
done

如果您想避免缩放,您必须计算ImageMagick外裁剪边的新长度。这涉及更多:

aw=16 #desired aspect ratio width...
ah=9 #and height
in="in.jpg"
out="out.jpg"

wid=`convert "$in" -format "%[w]" info:`
hei=`convert "$in" -format "%[h]" info:`

tarar=`echo $aw/$ah | bc -l`
imgar=`convert "$in" -format "%[fx:w/h]" info:`

if (( $(bc <<< "$tarar > $imgar") ))
then
  nhei=`echo $wid/$tarar | bc`
  convert "$in" -gravity center -crop ${wid}x${nhei}+0+0 "$out"
elif (( $(bc <<< "$tarar < $imgar") ))
then
  nwid=`echo $hei*$tarar | bc`
  convert "$in" -gravity center -crop ${nwid}x${hei}+0+0 "$out"
else
  cp "$in" "$out"
fi

我在示例中使用了16:9,希望它对大多数读者来说比3:2更有用。更改解决方案1中1920x1080或解决方案2中AW/AH变量的出现次数,以获得所需的纵横比。

照片信用:安德斯·克鲁斯伯格/皮博迪奖

 类似资料:
  • 我试图在从图库中选择图像后使用intent来裁剪图像。以下是我的代码片段 在这里,我使用PICK_IMAGE_REQUEST意图句柄调用上面的代码段 由于我在裁剪后使用了相同的意图,即PICK_IMAGE_REQUEST,可能会出现什么问题

  • 我希望在纵横比中限制裁剪选择区域的最小宽度和高度,以便用户不能拍摄图像的非常小的部分。 例如,用户上传的图像宽度为602px,高度为400px,在这种情况下,最小裁剪选择区域是什么? 根据谷歌最小可裁剪选择区域宽度=574px和高度=323px用户不能使其小于这个尺寸。 这是什么逻辑? 仅供参考以上逻辑我正在寻找作物封面照片像谷歌加 谢啦

  • 我将<code>背景 1.back_xml: 2.瓷砖.xml 现在,我将back.xml设置为< code >背景以< code>LinearLayout工作正常。 我需要有一个圆角,以及它的边框。但是我只有圆角的边框,而不是图像,我的代码中有什么问题吗? 这是我的照片:

  • 本节,我们将裁剪图像的一部分,然后把其结果绘制到画布上。 图3-2 裁剪图像 绘制步骤 按照以下步骤,裁剪图像的一部分,再把结果绘制到画布: 1. 定义画布上下文: window.onload  = function(){ var canvas  = document.getElementById("myCanvas"); var context  = canvas.getContext

  • 问题内容: 我一直在尝试使用NodeJS 的程序包创建一些缩略图,但是我很幸运。我需要调整大于600x600的图像大小(从给定的宽度/高度开始,可以是任何宽度/高度),但是当我将尺寸传递给gm时,它将创建与我要求的尺寸不同的图像。 例如,给定此代码,我假设运行时将收到大小为200x100的图像,但我得到的图像为180x100或200x90 … 我也尝试过调整大小选项。甚至还可以选择强制大小,但是输

  • 问题内容: 下面的代码可以很好地裁剪图像,这是我想要的,但是对于较大的图像,它也可以正常工作。有什么办法可以缩小图像吗? 想法是,在裁剪之前,我将能够使每个图像的大小大致相同,以便每次都能获得良好的效果 代码是 问题答案: 如果要生成缩略图,则必须首先使用调整图像大小。您必须调整图像的大小,以使图像较小侧的尺寸等于拇指的相应侧。 例如,如果源图像为1280x800px,拇指为200x150px,则