近期在使用ImageMagick處理酒店團購圖片,寫篇博客小小的總結下它的安裝及使用方法。ImageMagick是一套功能強大且免費的圖片處理開發包,能夠用來讀,寫和處理多種格式的圖片文件,總之非常強大就是了,廢話不多說了,立即來看看它的安裝及使用方法。
1、安裝
以linux下源代碼安裝為例,首先到 點擊打開鏈接 上下載最新的ImageMagick源代碼包,當前最新版本號的源代碼包為ImageMagick-6.7.9-3.tar.gz,完成下載后,開始進行安裝。
首先進入文件下載文件夾,解壓源代碼包:
cd ./Downloads tar xzvf ImageMagick-6.7.9-3.tar.gz
文件解壓完后,進入解壓文件夾:
cd ImageMagick-6.7.9-3/
接下來就是安裝三部曲了:
./configure
在這個過程中,它會對系統的編譯鏈接環境以及ImageMagick所依賴的第三方庫進行檢查,特別須要注意的是,ImageMagick在處理圖片時須要依賴jpeg、png等第三方圖片庫,假設你的程序須要處理這些格式的圖片,須要確保這些庫已經正確的安裝,./configure結束后會輸出一個檢查報告,例如以下圖:
圖中顯示,在當前系統中沒有安裝jpeg第三方庫,因為業務須要處理jpeg格式的圖片,因此在安裝ImageMagick之前,須要先安裝好jpeg第三方庫。到? 點擊打開鏈接 上下載最新的源代碼包jpegsrc.v8d.tar.gz,安裝過程和ImageMagick基本上一樣,這里就不多說了。安裝完jpeg庫后,就能夠繼續安裝ImageMagick了。
接下來就是編譯源代碼以及安裝了:
make sudo make install
默認的ImageMagick會被安裝到/usr/local路徑下,成功安裝后就能夠在命令行模式下使用ImageMagick了。
2、命令行模式
ImageMagick最方便的地方就是能夠在命令行模式下執行,結合shell腳本,我們能夠進行很復雜的圖片操作,以下舉幾個簡單的樣例進行拋磚引玉。
(1) 圖片格式轉換:比方把文件夾下全部的jpeg格式的圖片轉化為png的,就能夠例如以下進行操作:
for pic in *.jpg do convert ${pic} `basename ${pic} .jpg`.png done
(2) 壓縮圖片大小:一般來說,在web應用中,假設圖片非常多或者非常大,就須要考慮對圖片大小進行適當的壓縮,經常使用的壓縮辦法有:減小圖片尺寸(圖片縮放),調節壓縮比或者去除圖片中的多余信息。這些操作使用ImageMagick就能夠輕易的完畢:
convert -resize 100x100 src.jpg des.jpg
把src.jpg的圖片大小調整為100x100,convert命令在調整圖片高度和寬度的過程中會進行等比壓縮,也就是說圖片des.jpg的高寬比將會和src.jpg一致。
convert -quality 75% src.jpg des.jpg
壓縮比越低,圖片的大小越小,一般來說75%是最佳的壓縮比,在這樣的情況下肉眼是非常難看出圖片的失真。
convert -strip src.jpg dest.jpg
數碼相機在拍照的時候會在生成的圖片中留下一些額外的信息,這些信息往往是無用的,能夠使用convert –strip命令去除。
以上三種操作能夠合在一起進行:
convert -resize 100x100 –strip -quality 75% src.jpg dest.jpg
ImageMagick功能十分強大,上面僅僅是拋磚引玉,有興趣的同學能夠去挖掘其很多其它的功能和使用方法。
3、編程接口模式
除了命令行模式外,ImageMagick還提供了各種語言的編程接口,包含有c、c++、java、php和perl等等,以下以c++接口為例展示其用法。
ImageMagick的c++接口名稱為Magick++,Magick++中有下面幾個重要的對象:
Image:圖片對象,Magick++中最重要的對象;
Geometry:Geometry包括了圖片長度,寬度,偏移等信息;
Pixels:圖片的像素對象
Color:圖片的顏色對象
Blob:二進制數據大對象容器
#include <Magick++.h> #include <iostream> using namespace std; using namespace Magick; int main(int argc, char **argv) { InitializeMagick(*argv); Image image; try { // 讀入一個圖片文件,把它存放在image對象中 image.read( "src.jpg" ); // 把圖片縮放到100x100的大小 image.resize( Geometry(100,100) ); // 把縮放后的圖片存放到文件 image.write( "dest.jpg" ); } catch( Exception &error_ ) { cout << "Caught exception: " << error_.what() << endl; return 1; } return 0; }
從上面的樣例能夠看出Magick++的使用很的簡單,只須要包括Magick++.h一個頭文件就能夠了, 它的全部api及對象都放在Magick的命名空間內,唯一須要注意的是Magick++在錯誤發生的時候會拋出異常,所以一定要使用try catch塊捕獲住異常,這點千萬要記住。更具體的api文檔能夠參考以下的網址,使用文檔介紹的很具體,并且有各種樣例,相信不會很難看懂:
點擊打開鏈接
另外編譯的時候要-I/usr/local/include/ImageMagick ,-L/usr/local/lib,-lMagickCore -lm -lgomp -lpthread,學c++的都懂得,這里就不多說了
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
