gm工具最基本的一些参数有-resize -crop -thumbnail -gravity,不过在此之前,需要先弄清楚的是其-geometry参数,注意-resize跟-geometry是别名关系,其表达式为:
<width>x<height>{+-}<x>{+-}<y>{%}{@}{!}{^}{<}{>}
以-resize为例,仅指定宽高,有如下常见三种:
256x256 #默认是保持原宽高比,目标宽高是其最大值,也就是宽或高中有一个可能小于256
256x256! #不保持宽高比,强行拉伸
256x256^ #保持宽高比,目标宽高是其最小值,也就是宽或高中有一个可能大于256
按比例伸缩时,可使用百分比,比如生成当前图片的2x图,就可以使用-resize 200%
@的用法有点奇特,下面的例子是说,保持宽高比,结果宽乘以结果高的像素不超过200x200,即4万个像素:
-resize 200x200@ src.png dst.png
'640x480>'表示宽大于640或者高大于480才进行缩放,否则什么也不做;'640x480<'表示宽小于640且高小于480时进行缩放,否则什么也不做;
-thumbnail跟-resize的使用语法和作用一样,不过-thumbnail只关注快速生成缩略图,而不太关注生成结果的质量,但其质量往往是可接受的,通常生成小图,但也可以放大原图。
举例一个实用的例子,将一个图片居中裁剪出来一个指定尺寸的矩形,注意这里的+0+0是不能省略的,否则-gravity就不会起作用,截图结果不是居中裁剪的:
convert -resize 144x144^ -gravity center -crop 144x144+0+0 src.png ic_launcher.png
-gravity 可取值为:NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast。
创建一个图片:
convert -size 800x800 xc:white white.png
顺时针旋转90度:
convert -rotate 90 src.png dst.png
把某些区域填成白色:
convert -fill '#fff' -draw 'rectangle 10,10 100,100' src.jpg dst.jpg
把一个图画到另一个底图上:
convert -draw 'image over 10,10 100,100 white.png' src.jpg dst.jpg