ImageMagick是一個很好用的對圖片進行格式轉換、縮減大小、裁剪等等進行操作的工具,在windows和linux系統都可以安裝,因爲我們的環境是linux環境,所以我就以linux系統爲安裝環境進行測試。
系統環境:
# cat /etc/SuSE-release
SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 2
一、編譯安裝環境
ImageMagick下載鏈接
https://www.imagemagick.org/download/ImageMagick.tar.gz
因爲生產環境需要對png格式的圖片進行修改,所以需要png庫的支持,這裏需要編譯libpng-1.5.8.tar.gz,相應的如果你的圖片格式是其他格式的,你就需要其他的庫文件的支持。
/home/sxzhou # ll
total 13532
-rw-r--r-- 1 root root 12769934 Mar 2 14:02 ImageMagick.tar.gz
-rw-r--r-- 1 root root 1059513 Mar 2 14:12 libpng-1.5.8.tar.gz
編譯安裝libpng
/home/sxzhou # tar -zxf libpng-1.5.8.tar.gz
/home/sxzhou # cd libpng-1.5.8/
/home/sxzhou/libpng-1.5.8 # ./configure
/home/sxzhou/libpng-1.5.8 # make && make install
編譯安裝ImageMagick
/home/sxzhou # tar -zxf ImageMagick.tar.gz
/home/sxzhou # cd ImageMagick-7.0.5-0/
/home/sxzhou/ImageMagick-7.0.5-0 # ./configure --prefix=/usr/local/ImageMagick --enable-share --enable-static LDFLAGS="-L/usr/lib64" CPPFLAGS="-I/usr/include"
這一步之後在末尾可以看到對於png圖片格式的支持
PANGO --with-pango=yes no
PERL --with-perl=no no
PNG --with-png=yes yes
RAQM --with-raqm=yes no
RSVG --with-rsvg=no no
/home/sxzhou/ImageMagick-7.0.5-0 # make && make install
/usr/local/ImageMagick # ldconfig /usr/local/lib
二、使用案例
2.1、對圖片大小進行修改
-resize 對圖片大小進行修改
/usr/local/ImageMagick/bin # ./convert -resize 500x300 /home/sxzhou/1.PNG /home/sxzhou/2.PNG
注意:
使用字母x代表乘號而不是*
參數說明:
500x300是指圖片的寬x長(也可以只指明寬或者長,例如-resize 500,指明寬度,長度會按比例進行相應縮減,-resize x300,指明長度,寬度會按比例進行相應縮減)
/home/sxzhou/1.PNG 爲源文件,也就是修改前的文件
/home/sxzhou/2.PNG 爲目標文件,也就是修改後的文件
2.2、按比例縮減圖片
-sample 按比例縮減圖片
/usr/local/ImageMagick/bin # ./convert -sample 50% /home/sxzhou/1.PNG /home/sxzhou/3.PNG
以字節爲單位顯示文件大小
/home/sxzhou # du -sk *.PNG
120 1.PNG
112 2.PNG
56 3.PNG
把3.PNG拉出來查看圖片大小(寬x高)可以發現也縮減了一半
2.3、對圖片進行優化以及批量修改圖片
在生產環境中經常會遇到對於圖片大小要求儘可能小而清晰度高的情況,這時候就需要對於圖片修改時加入優化的參數。
+profile “*” 去掉圖片的exif信息
-quality 85 對圖片的質量進行縮減(質量縮減直到75的範圍內,肉眼識別的差別基本很小)
如下面所示:
在生產環境如果遇到批量修改圖片,而且對於小於一定大小的圖片不進行壓縮,另外對於圖片前後名字不變,如果同時滿足以上的條件的話就需要組合命令。
/usr/local/ImageMagick/bin # ln -s /usr/local/ImageMagick/bin/convert /usr/bin/convert
修改前的圖片大小
/home/sxzhou/ # du -sk *.png
44 BG00.png
428 BG01.png
80 BG10.png
44 BG11.png
1788 BJ00.png
592 BJ01.png
96 BJ10.png
批量修改圖片
/home/sxzhou/ # find -name "*.png" -exec convert -resize '500x360>' {} {} \;
修改後的圖片大小
/home/sxzhou/ # du -sk *.png
44 BG00.png
208 BG01.png
80 BG10.png
44 BG11.png
256 BJ00.png
260 BJ01.png
96 BJ10.png
可以看到只有紅色部分標記的圖片改變了大小