ImageMagick是一個(gè)免費(fèi)的創(chuàng)建、編輯、合成圖片的軟件。它可以讀取、轉(zhuǎn)換、寫(xiě)入多種格式的圖片。圖片切割、顏色替換、各種效果的應(yīng)用,圖片的旋轉(zhuǎn)、組合,文本,直線(xiàn),多邊形,橢圓,曲線(xiàn),附加到圖片伸展旋轉(zhuǎn)。其全部源碼開(kāi)放,可以自由使用,復(fù)制,修改,發(fā)布。它遵守GPL許可協(xié)議。它可以運(yùn)行于大多數(shù)的操作系統(tǒng)。 最為重要的是,ImageMagick的大多數(shù)功能的使用都來(lái)源于命令行工具。
ImageMagick還有一個(gè)小工具identify,它可以用來(lái)顯示一個(gè)圖片文件的詳悉信息,比如格式、分辨率、大小、色深等等,你都可用它來(lái)幫你的忙。
convert 轉(zhuǎn)換圖像格式和大小,模糊,裁剪,驅(qū)除污點(diǎn),抖動(dòng),臨近,圖片上畫(huà)圖片,加入新圖片,生成縮略圖等。
identify 描述一個(gè)或較多圖像文件的格式和特性。
composite 根據(jù)一個(gè)圖片或多個(gè)圖片組合生成圖片
舉個(gè)例子
convert +profile '*' [src]{file}.{ext} -quality 80 -resize '280x140^>' -gravity Center -crop 280x140+0+0 +repage [out]{file}_280x140.{ext}
把一張圖片按80的質(zhì)量去壓縮(jpg的壓縮參數(shù)),同時(shí)按圖片比例非強(qiáng)制縮放成不超過(guò)280x140的圖片.居中裁剪280x140,去掉圖片裁減后的空白和圖片exif信息,通常這種指令是為了保證圖片大小正好為280x140
下面對(duì)各個(gè)指令的含義簡(jiǎn)要說(shuō)明
-quality 圖片質(zhì)量,jpg默認(rèn)99,png默認(rèn)75
-resize
100x100 高度和寬度比例保留最高值,高比不變
100x100^ 高度和寬度比例保留最低值,寬高比不變
100x100! 寬度和高度強(qiáng)制轉(zhuǎn)換,忽視寬高比
100x100> 更改長(zhǎng)寬,當(dāng)圖片長(zhǎng)或?qū)挸^(guò)規(guī)定的尺寸
100x100< 更改長(zhǎng)寬 只有當(dāng)圖片長(zhǎng)寬都超過(guò)規(guī)定的尺寸
100x100^> 更改長(zhǎng)寬,當(dāng)圖片長(zhǎng)或?qū)挸^(guò)規(guī)定的尺寸。高度和寬度比例保留最低值
100x100^< 更改長(zhǎng)寬,只有當(dāng)圖片長(zhǎng)寬都超過(guò)規(guī)定的尺寸。高度和寬度比例保留最低值
100 按指定的寬度縮放,保持寬高比例
x100 按指定高度縮放,保持寬高比
-gravity NorthWest, North, NorthEast, West, Center, East, SouthWest, South, SouthEast截取用的定位指令,定位截取區(qū)域在圖片中的方位
-crop 200x200+0+0 截取用的截取指令 ,在用定位指令后,按后兩位的偏移值偏移截取范圍左上角的像素后,再按前兩位的數(shù)值,從左上角開(kāi)始截取相應(yīng)大小的圖片
+repage 去掉圖片裁減后的空白
-dissolve 30 設(shè)定組合圖片透明度dissolve示例
+/-profile * 去掉/添加圖片exif信息
下面記錄下一些比較復(fù)雜一點(diǎn)的指令:
convert +profile '*' [src]{file}.{ext} -quality 90 -resize '700>' /data/tony/watermark_1.png -gravity southeast -compose Dissolve -composite [out]{file}_1024x1024.{ext}
convert +profile '*' [src]{file}.{ext} /data/watermark_1.png -gravity southeast -geometry +10+10 -composite [src]{file}.{ext}
convert +profile '*' [src]{file}.{ext} -coalesce -resize '950x135>' [out]{file}_950x135.{ext}
convert +profile '*' [src]{file}.{ext} -resize '650x500>' miff:- | composite +profile '*' -dissolve 30 -gravity southeast /data/tony/watermark_1.png - [out]{file}_650x500.{ext}
convert [src]{file}.{ext} -quality 80 -resize '190>' -background white -gravity center -extent 190x +repage [out]{file}_width190.{ext}
【/bin/sh^M: bad interpreter: 沒(méi)有那個(gè)文件或目錄】
vim filename
然后用命令
:set ff? #可以看到dos或unix的字樣. 如果的確是dos格式的。
然后用
:set ff=unix #把它強(qiáng)制為unix格式的, 然后存盤(pán)退出。
convert功能強(qiáng)大,用來(lái)批處理圖片的放大、縮小、裁剪、旋轉(zhuǎn)、合并、水印、拼接、格式轉(zhuǎn)換等都非常方便,特別適合后臺(tái)的圖片處理。
1,獲取圖片信息
$identify image.png image.png PNG 559x559 559x559+0+0 8-bit sRGB 467KB 0.000u 0:00.008
如果只需要獲取寬高:
$identify -format "%wx%h" image.png
2,放大,縮小 -resize
$convert image.png -resize 200x200 resize.png
>
也可以按照比例(縮小一半):
$convert image.png -resize 50% resize.png
還可以多次縮放(先縮小一半,再放大一倍,效果就是變模糊了):
$convert image.png -resize 50% -resize 200% resize.png
3,放大,縮小 -sample
與resize的區(qū)別在于-sample只進(jìn)行了采樣,沒(méi)有進(jìn)行插值,所以用來(lái)生成縮略圖最合適
$convert image.png -sample 50% sample.png
這個(gè)處理的效果就是馬賽克:
$convert image.png -sample 10% -sample 1000% sample.png
4,裁剪 -crop
從(50,50)位置開(kāi)始,裁剪一個(gè)100X100大小的圖片:
$convert image.png -crop 100x100+50+50 crop.png
如果不指定位置,則按照這個(gè)大小分隔出小圖片,這個(gè)命令生成crop-0.png,crop-1.png,crop-2.png……:
$convert image.png -crop 100x100 crop.png
可以指定裁剪位置的相對(duì)位置 -gravity:
$convert image.png -gravity northeast -crop 100x100+0+0 crop.png
-gravity即指定坐標(biāo)原點(diǎn),有northwest:左上角,north:上邊中間,northeast:右上角,east:右邊中間……
5,旋轉(zhuǎn) -rotate
$convert image.png -rotate 45 rotate.png
默認(rèn)的背景為白色,我們可以指定背景色:
$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
6,合并
合并指的是將一張圖片覆蓋到一個(gè)背景圖片上:
$convert image.png -compose over overlay.png -composite newimage.png
-compose指定覆蓋操作的類(lèi)型,其中over為安全覆蓋,另外還有xor、in、out、atop等等
覆蓋的位置可以通過(guò)-gravity指定:
$convert image.png -gravity southeast -compose over overlay.png -composite newimage.png
這是將圖片覆蓋到底圖的右下角。
7,更改圖片的alpha通道
分兩步:
$convert image.png -define png:format=png32 image32.png $convert image32.png -channel alpha -fx "0.5" imagealpha.png
這個(gè)命令首先將image.png的格式改為png32(確保有alpha通道),然后更改alpha通道置為0.5,也就是半透明,值的范圍為0到1.0
可以使用將一張透明圖片覆蓋到原圖上的方式做水印圖片:
$convert image.png -gravity center -compose over overlay.png -composite newimage.png $convert image.png -gravity southeast -compose over overlay.png -composite newimage.png
8,拼接
橫向拼接(+append),下對(duì)齊(-gravity south):
$convert image1.png image2.png image3.png -gravity south +append result.png
縱向拼接(-append),右對(duì)齊(-gravity east):
$convert image1.png image2.png image3.png -gravity east -append result.png
9,格式轉(zhuǎn)換
$convert image.png image.jpg $convert image.png -define png:format=png32 newimage.png
10,文字注釋
$convert image.png -draw "text 0,20 'some text'" newimage.png
從文件text.txt中讀取文字,指定顏色,字體,大小,位置:
$convert source.jpg -font xxx.ttf -fill red -pointsize 48 -annotate +50+50 @text.txt result.jpg
11,去掉邊框
$convert image.png -trim -fuzz 10% newimage.png