ImageMagick是用C语言开发图片处理程序。可以对图片进行改变大小、旋转、锐化、减色或增加特效等操作。对图片的操作,即可以通过命令行进行,也可以用C/C++、Perl、Java、PHP、Python或Ruby编程来完成。
ImageMagick 官网地址:http://www.imagemagick.org/
对于站长来说,网站中有大量图片,占用了很大空间,如果你是Linux系统,例如centos,怎么使用ImageMagick批量压缩某个目录下的所有图片文件呢?
本人实践+总结经验如下
安装imagemagick软件:
先安装imagemagick依赖的库
1 | yum install -y libjpeg libjpeg-devel libpng libpng-devel libtiff libtiff-devel libungif libungif-devel freetype zlib |
如果以前安装过,卸载掉ImageMagick:
1 | yum remove ImageMagick |
然后yum命令安装
1 | yum install ImageMagick |
查看是否安装成功
1 | convert --version |
安装成功会出现以下信息(不同版本可能有区别)
1 2 3 | Version: ImageMagick 6.7.2-7 2017-03-22 Q16 http://www.imagemagick.org Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC Features: OpenMP |
影响图片大小(占用空间)主要取决于图片的profile和quality属性:
quality:图片的品质,品质越高,占用的空间越大。适当降低品质能很大程度的减少图片的尺寸。一般来说,从品质100降到85,基本上肉眼很难区别其差别,但尺寸上减少很大。imagemagick通过通过 -quality 来设置。
profile:记录图片一些描述信息。例如相机信息(光圈,相机型号)、photoshop元数据,颜色表等信息。它占用的空间可以从几KB到几百KB,甚至可能更大。ImageMagicK可以通过两种方式来去掉这些信息: +profile “*”或-strip使用方法详见下面的命令。
相关命令:
查找当前文件夹下所有jpg图片,并按85%质量进行压缩,可以替换为指定目录,例如/home/img目录下,./为当前目录,这里是压缩.jpg后缀格式的图片,其他格式请替换命令中的相应格式即可。
1 | find ./ -iname “*.jpg” -exec convert -strip +profile “*” -quality 85 {} {} \; |
查找当前目录下大于500k的(jpg\|JPG\|png\|PNG\|bmp\|BMP\|jpeg\)格式图片有多少张(大小自己调整*K),替换括号内的格式即可查找指定格式图片数量
1 | find ./ -regex '.*\(jpg\|JPG\|png\|PNG\|bmp\|BMP\|jpeg\)' -size +500k | wc -l |
查找当前目录下大于500k的(jpg\|JPG\|png\|PNG\|bmp\|BMP\|jpeg\)格式图片(大小自己调整*K),将大于500kb的图片尺寸缩小一半(50%x50%),可以自行调整压缩尺寸比例
1 | find ./ -regex '.*\(jpg\|JPG\|png\|PNG\|bmp\|BMP\|jpeg\)' -size +500k -exec convert -resize 50%x50% {} {} \; |
查找当前目录下大于500k的(jpg\|JPG\|png\|PNG\|bmp\|BMP\|jpeg\)格式图片(大小自己调整*K),将大于500kb的按85%图片质量进行压缩
1 | find ./ -regex '.*\(jpg\|JPG\|png\|PNG\|bmp\|BMP\|jpeg\)' -size +500k -exec convert -strip +profile “*” -quality 85 {} {} \; |
查找当前目录下大于500k的(jpg\|JPG\|png\|PNG\|bmp\|BMP\|jpeg\)格式图片(大小自己调整*K),将大于500kb的图片尺寸限定尺寸(800*800像素)进行压缩,若要限定宽度为800,宽高比例不变,则将800×800改为800
1 | find ./ -regex '.*\(jpg\|JPG\|png\|PNG\|bmp\|BMP\|jpeg\)' -size +500k -exec convert -resize 800x800 {} {} \; |
结语:
在linux下可以很方便的对某个目录下某一格式的所有图片文件进行压缩,再结合shell脚本及crontab定时任务,即可定期对大于要求的图片进行自动处理,对于站长来说非常方便。
上述命令中用规则表达式把jpg和JPG后缀图片一网打尽,{}代表查找到的文件,这里没有改变convert前后的文件名,最后是转义的分号表示一个迭代的处理完成。convert的-quality参数,质量值为0-100之间的数值,数字越大,质量越好,一般指定70-80,基本上看不出前后的差别。
imagemagick除了能对图片进行处理,还能转换图片格式,pdf转jpg也是可以的,imagemagick具体有哪些功能请自行百度查找。
convert 转换图像格式和大小,模糊,裁剪,驱除污点,抖动,临近,图片上画图片,加入新图片,生成缩略图等。
identify 描述一个或较多图像文件的格式和特性。
composite 根据一个图片或多个图片组合生成图片
举个复杂点儿的例子
1 | convert +profile '*' [src]{file}.{ext} -quality 80 -resize '280x140^>' -gravity Center -crop 280x140+0+0 +repage [out]{file}_280x140.{ext} |
把一张图片按80的质量去压缩(jpg的压缩参数),同时按图片比例非强制缩放成不超过280×140的图片.居中裁剪280×140,去掉图片裁减后的空白和图片exif信息,通常这种指令是为了保证图片大小正好为280×140
下面对各个指令的含义简要说明
-resize命令常用参数
100×100 高度和宽度比例保留最高值,高比不变
100×100^ 高度和宽度比例保留最低值,宽高比不变
100×100! 宽度和高度强制转换,忽视宽高比
100×100> 更改长宽,当图片长或宽超过规定的尺寸
100×100< 更改长宽 只有当图片长宽都超过规定的尺寸 100×100^> 更改长宽,当图片长或宽超过规定的尺寸。高度和宽度比例保留最低值
100×100^< 更改长宽,只有当图片长宽都超过规定的尺寸。高度和宽度比例保留最低值
100 按指定的宽度缩放,保持宽高比例
x100 按指定高度缩放,保持宽高比
-gravity NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast截取用的定位指令,定位截取区域在图片中的方位
-crop 200×200+0+0 截取用的截取指令 ,在用定位指令后,按后两位的偏移值偏移截取范围左上角的像素后,再按前两位的数值,从左上角开始截取相应大小的图片
+repage 去掉图片裁减后的空白
-dissolve 30 设定组合图片透明度dissolve示例
+/-profile * 去掉/添加图片exif信息
评论0