convert 是 ImageMagick 工具包中的工具之一。
ImageMagick 提供了丰富的基于命令行的图片处理能力,非常适合制作批量图片处理工具,比如,生成缩略图、批量格式转换等等。
另外,针对常用的变成语言,ImageMagic 都拥有相应的接口库供使用。是各种图像处理开发中的优选方案。更多功能有待挖掘。
图片缩放(采样并插值)
这个是把图片批量进行 resize 的脚本。
#!/bin/sh counter=1 root=mypict resolution=400x300 for i in `ls -1 $1/*.jpg`; do echo "Now working on $i" convert -resize $resolution $i ${root}_${counter}.jpg counter=`expr $counter + 1` done
除了指定分辨率(会就近原则,保持原来画幅比例),还可以指定缩放倍数:
$convert image.png -resize 50% -resize 200% -quality 100 resize.png
上面这条,先缩小为原来一半,然后放大一倍;虽然最后大小和原来一样,但是因为缩放过程中像素有丢失,画面明显模糊了。
使用 -quality 开关,可以控制 resize 的质量;可以不指定,但是,总觉得默认的 resize 图片质量不高。
图片抽样
与resize的区别在于-sample只进行了等概率抽样,没有进行插值。一般生成缩略图用这个方法:
$convert image.png -sample 50% sample.png
图片切割
使用 convert 将图片切割成多张 40x40 的小图:
convert 5.png -crop 40x40 test5.png
从(0,20)位置开始,裁剪一张(320,200)的图出来:
convert 1-2.png -crop 320x200+0+20 test.png
从右下角(-10, -5)位置开始,裁剪一张 100x80 的图出来:
convert src.jpg -gravity southeast -crop 100x80+10+5 dest.jpg
在原图中心截取一张 100x80 的图出来:
convert src.jpg -gravity center -crop 100x80+0+0 dest.jpg
图片旋转
图片旋转实际用的场合最多可能是90度和180度。下面这句可以实现 45 度旋转:
$convert image.png -rotate 45 rotate.png
按上面方式旋转后,是把旋转的图片放到了一张更大的图当中,大图空余部分,是用白色填充的。如果我们先用其它颜色填充:
$convert image.png -backround black -rotate 45 rotate.png $convert image.png -background #000000 -rotate 45 rotate.png $convert image.png -background rgba(0,0,0,0) -rotate 45 rotate.png
合成图片
应用比较多的可能就是做水印了,暂时记录做水印的方法:
$convert image.png -gravity center -compose over overlay.png -composite newimage.png
$convert image.png -gravity southeast -compose over overlay.png -composite newimage.png
添加文字
恩,在图片上写一些字,别问我为什么需要:
$convert image.png -draw "text 0,20 'some text'" newimage.png
从文件里面读取,并指定大小、颜色、位置等:
$convert source.jpg -font xxx.ttf -fill red -pointsize 48 -annotate +50+50 @text.txt result.jpg
去掉图片边框
$convert image.png -trim -fuzz 10% newimage.png
改变背景色