GraphicsMagick笔记-基本使用
GraphicsMagick是非常强大的图片处理工具。支持超过88中图片格式,包含 DPX, GIF, JPEG, JPEG-2000, PNG, PDF, PNM, TIFF这些常用的格式。图片分享网站Flickr和电商Etsy这两家公司用的就是GraphicsMagick。
安装
windows可以从这个FTP下载可执行安装程序:ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/windows/
同时安装包我上传到百度云中,还有一些测试用的图片:
链接: https://pan.baidu.com/s/1nwLh4hF 密码: v7yt
常用命令
GraphicsMagick包含了许多子命令,常用命令有:
- convert:转换图片格式和大小,同时叠加变换操作(裁减,模糊等)
- composite:合并多张图片为一张图片
convert命令
把一种格式的一张图片转换为另外一种格式的图片,在转换同时可以应用图片操作。
语法:
1 | gm convert [ options ... ] input_file [ options ... ] output_file |
convert命令例子
缩略图:
1 | gm convert -size 120x120 cockatoo.jpg -resize 120x120 +profile "*" thumbnail.jpg |
参数说明:
-size 120x120并不是指定原图格式,而是提示JPEG decoder只需要120x120的处理即可,这样在图片解码给缩略图操作的时候就可能不用完整的信息,从而加速命令的执行。-resize 120x120指定输出的图片的尺寸,这里不会强制缩放图片到120x120,而是把长边缩小为120。+profile "*"'指定移除ICM, EXIF, IPTC或者其他图片扩展信息,这样可以减小生成的缩略图的大小
-resize参数
1 | -resize <width>x<height>{%}{@}{^}{!}{<}{>} |
默认情况下,width和height指的是最大值,并且会保持原图的长宽比。也就是说图片缩放会,会最大化的占用width*height这个区域。可以想象为,使用width*height画了一个矩形,gm会缩放图片,使图片面积最大,但是又能放入这个矩形中。也就是图片的至少有一个边,与这个矩形对应的边长度相等。
如果在尺寸后面追加^,表示width和height指的是最小值,并且会保持原图的长宽比。可以想象为,使用width*height画了一个矩形,gm会缩放图片,使图片面积最小,但是又能占满这个矩形。
如果在尺寸后面追加!,表示不保留原图的长宽比,强制缩放为width和height指定的值。
如果只指定了width并且没有跟随x,则height的值会设置为与width一样。-resize 10与-resize 10x10是一样的。
如果指定为<width>x或者x<height>,则宽/高使用对应的值,另外一条边根据原图长宽比计算出。
如果在尺寸后面追加%,则使用比例的方式计算尺寸。
如果在尺寸后面追加@,表示尺寸指的是最大的面积大小,gm保证缩放后的图片的width*height小于等于这个面积。
有一种很常见的需求,比如要求图片缩放为640x480如果图片本身小于这个尺寸了,就不动,只把大于这个尺寸的图片缩放。>和<这两个后缀就是用于处理这种需求的。
如果在尺寸后面追加>,表示图片的长度或者宽度大于指定的尺寸才进行处理。
如果在尺寸后面追加<,表示图片的长度或者宽度小于指定的尺寸才进行处理。
上面说的需求可以使用640x480>来实现。这样如果图片尺寸是256x256就不会处理,如果是512x512或者1024x1024就会被缩放为480x480。
-resize的参数应该使用双引号括起来,以免被shell解读。
在convert命令中,-resize参数作用与-geometry作用一样。
文字水印:
1 | gm convert -gravity southeast -font ArialBold -pointsize 45 -fill red -draw "text 10,10 hello" input.jpg output.png |
参数说明:
-gravity southeast指定右下角水印-font ArialBold指定字体-pointsize 45指定文字大小-fill red指定文字颜色-draw "text 10,10 hello"指定文字颜色和位置
convert命令其他常用参数
-quality <value>
设置JPEG/MIFF/PNG/TIFF格式图片的压缩级别
composite命令
语法:
1 | gm composite [ options ... ] change-image base-image [ mask-image ] output-image |
composite命令例子
图片叠加(把a叠加到base上):
1 | gm composite a.png base.png output.png |
图片水印:
1 | gm composite -gravity southeast -geometry +50+50 -dissolve 50 watermark.jpg input.jpg output.png |
参数说明:-gravity southeast:设置坐标轴原点到左下角-geometry +50+50:偏移50,50-dissolve 50:不透明度50
-gravity参数
1 | -gravity <type> |
gravity参数用于指定change-image叠加在base-image的什么位置。
有9个位置可以选择,可以联想骰子上的9点:NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast.
默认的位置是NorthWest,也就是左上角。
-geometry参数
1 | -geometry {+-}<x>{+-}<y> |
-geometry是一个很强大的参数,在不同的命令中有不同的效果。在convert命令中,他用于缩放图片。而在composite命令中,他用于指定change-image的偏移。
+x+y表示横向正向偏移x,纵向正向偏移y。偏移的方向与gravity参数有关。
如果gravity参数的取值为NorthEast, East, SouthEast,则x表示change-image右边与base-image右边的距离。其他情况表示x表示change-image左边与base-image左边的距离。
如果gravity参数的取值为SouthWest, South, SouthEast,则y表示change-image下边与base-image下边的距离。其他情况表示x表示change-image上边与base-image上边的距离。
偏移量不受%号影响。只支持像素单位。
参考资料

