1. 程式人生 > >ImageMagick簡介、GraphicsMagick、命令列使用示例

ImageMagick簡介、GraphicsMagick、命令列使用示例

ImageMagick資料

----------------------------------------------------------------------------

ImageMagick官網

ImageMagick Identify 命令列工具(官網)

ImageMagick 程式介面文件

ImageMagick使用示例(非常好的示例)

 

GraphicsMagick資料

----------------------------------------------------------------------------

GraphicsMagick官網 

GraphicsMagick程式設計介面  

ImageMagick 程式介面  

Im4java 下載地址

IM4JAVA+GraphicsMagick處理網站圖片  

 

命令列引數,說明文件

-------------------------------------------------------------

GraphicsMagick 命令列引數,說明文件
ImageMagick 命令列引數,說明文件

ImageMagick介紹

----------------------------------------------------------------------------

      ImageMagick是一個免費的建立、編輯、合成圖片的軟體。它可以讀取、轉換、寫入多種格式的圖片。圖片切割、顏色替換、各種效果的應用,圖片的旋轉、組合,文字,直線,多邊形,橢圓,曲線,附加到圖片伸展旋轉。其全部原始碼開放,可以自由使用,複製,修改,釋出。它遵守GPL許可協議。它可以運行於大多數的作業系統。

最為重要的是,ImageMagick的大多數功能的使用都來源於命令列工具。

 

GraphicsMagick介紹

----------------------------------------------------------------------------

GraphicsMagick是從 ImageMagick 5.5.2 分支出來的,但是現在他變得更穩定和優秀,GM更小更容易安裝、GM更有效率、GM的手冊非常豐富GraphicsMagick的命令與ImageMagick基本是一樣的。

 

 

ImageMagick、GraphicsMagick的命令概覽

----------------------------------------------------------------------------

[ convert | identify | mogrify | composite | montage | compare | display | animate | import | conjure ]

 

convert:轉換影象格式和大小,模糊,裁剪,驅除汙點,抖動,臨近,圖片上畫圖片,加入新圖片,生成縮圖等。 
identify:描述一個或較多影象檔案的格式和特性。 
mogrify:按規定尺寸***一個影象,模糊,裁剪,抖動等。Mogrify改寫最初的影象檔案然後寫到一個不同的影象檔案。 
composite:根據一個圖片或多個圖片組合生成圖片。 
montage:建立一些分開的要素影象。在含有要素影象任意的裝飾圖片,如邊框、結構、圖片名稱等。 
compare:在算術上和視覺上評估不同的圖片***其它的改造圖片。 
display:如果你擁有一個X server的系統,它可以按次序的顯示圖片 
animate:利用X server顯示動畫圖片 
import:在X server或任何可見的視窗上輸出圖片檔案。 你可以捕獲單一視窗,整個的熒屏或任何熒屏的矩形部分。 
conjure:解釋執行 MSL (Magick Scripting Language) 寫的指令碼。


示例一:綜合操作(ImageMagick命令列)----------------------------------------------------------------------------

  1. convert -crop 300x300+0+0 -resize 200x200 -colors 100 +profile "*" 1.jpg 1.png  

 

處理過程解釋:

1、把當前目錄1.jpg圖片檔案,從左上角(0,0)座標為起點,裁剪一塊300x300畫素的部分。

2、然後把這部分縮小到200x200畫素。

3、然後把顏色縮減到100色。
4、+profile "*"   , 意味著在圖片檔案裡不儲存Exif資訊,以減小圖片體積。

5、最後生成1.png,儲存在當前目錄。


注意:-resize會試圖保留原圖的原始長寬比例,因此不一定生成的圖片和你指定的尺寸一定匹配,比如,如果2.jpg大小是400x200,所以如果用命令:convert 2.jpg -resize 100x100 2.png,那麼生成的圖片2.png的實際大小是100x50。

 

常用的引數用途說明:
-crop 寬x高+起點橫座標+起點縱座標:裁剪圖 
-resize 寬x高!:改變尺寸,如果使用驚歎號,表示不保留視覺比例,強行改變尺寸匹配給定的寬和高;如果僅給定寬或者高,如“寬x”或“x高”形式的引數(“x高”與“寬x高”的效果是一樣的),則以已知引數為基準按比例改變尺寸。
-colors 顏色數:設定圖片採用的顏色數,如果是生成png或gif圖片應指定這個引數 
-quality 質量:設定jpeg圖片輸出質量,推薦採用80,此命令僅用於輸出格式是jpg的情況,不應省略,省略的話預設質量是95,生成圖片過大
+profile "*":圖片中不儲存Exif資訊,必須使用,否則生成圖片過大

 

示例二:生成縮圖(縮小圖片) (ImageMagick命令列)----------------------------------------------------------------------------

  1. convert -sample 80x40 input.jpg output.jpg   (使用一個簡單的演算法生成縮圖,速度快,畫質較低,適合生成100x100以下的圖片)  
  2. convert -resize 100x100 foo.jpg thumbnail.jpg (畫質好)  
  3. convert -resize 50%x50% foo.jpg thumbnail.jpg  
  4. convert -resize 100x200 22.jpg(圖片路徑)   11.jpg(縮放後存放路徑)   圖片按比例縮放  
  5. convert -resize 100x200\! 22.jpg(圖片路徑)   11.jpg(縮放後存放路徑)   強制按給定的寬高縮放  

 

 

示例三:裁剪圖片(ImageMagick命令列)----------------------------------------------------------------------------

  1. convert -crop  100(長)x200(高)+10(x座標)+10(y座標)   22.jpg(源圖片路徑)   11.jpg(縮放後存放路徑)    

  

 

示例四:旋轉影象  (ImageMagick命令列)----------------------------------------------------------------------------

  1. convert -rotate 90 input.jpg output.jpg  

 
示例五:獲取檔案資訊 (ImageMagick命令列)----------------------------------------------------------------------------

  1. libtiff tiffinfo filename.tiff  

 

 

示例六:把圖片變為黑白顏色(ImageMagick命令列)----------------------------------------------------------------------------

  1. convert -monochrome foo.png bar.png  

 

新增圖片水印處理(ImageMagick命令列)
--------------------------------
假設把名為logo.gif的水印圖示新增在原始圖片(src.jpg)右下角,且水印的下邊緣距原始圖片10畫素、右邊緣距原始圖片5畫素。使用如下命令即可:

  1. convert src.jpg logo.gif -gravity southeast -geometry +5+10 -composite dest.jpg  

 

 

 

新增英文文字水印  (ImageMagick命令列)

-----------------------------------------------------
convert  -fill white -pointsize 24 -draw "text 10,15 'lifesinger 2006' "  1.png  2.png

文字座標在:10x50的位置
可以用-font指定字型,這時需要安裝Ghostscript支援。

如果安裝IM、GM時,沒有安裝Ghostscript字型,會預設使用Linux系統的字型,目錄是:/usr/share/fonts/default/Type1/

 

新增中文文字水印 (ImageMagick命令列)

-----------------------------------------------------

高版本的ImageMagick的方法

-------------------

convert -font C:\ImageMagick\font\fangzheng.ttf  -fill green -pointsize 40 -draw "text 10,50 '文字'" d:\bagImg\21.jpg d:\bagImg\22.jpg

引數說明: -font C:\ImageMagick\font\fangzheng.ttf    是指明Windows字型檔案。

要高版本的ImageMagick同,在加中文文字水印時才不亂碼。

 

 

低版本的ImageMagick的方法

-------------------

存在中文的情況:假設存有資訊的檔案叫t.txt,字型檔案是msyh.ttf。

  1. 方法1:  
  2. //把檔案t.txt中的資訊生成圖片txt.png, -transparent white讓圖片的背景透明,-size x30設定圖片的高度  
  3. convert -transparent white -font msyh.ttf -fill black -pointsize 24 label:@t.txt txt.png  
  4. //把txt.png合成到src.jpg上  
  5. convert src.jpg txt.png -gravity southeast -geometry +10+5 -composite dest.jpg  
  6.   
  7. 方法2:  
  8. convert src.jpg -transparent white -font msyh.ttf -fill black -pointsize 24 -size x30 label:@t.txt -gravity southeast -geometry +10+5 -composite dest.jpg  
  9.   
  10. 方法3:  
  11. mogrify -font msyh.ttf -pointsize 24 -fill black -weight bolder -gravity southeast -annotate +20+20 @"t.txt" src.jpg  

說明:上述第一、二種方法都有瑕疵,第二種背景不能變成透明,第一種雖然生成的圖片可以透明,但是合成到原始圖上效果不是很理想,第三種是完全透明的,所以推進用第三種方式來操作。


GraphicsMagick影象處理系統使用方法
-----------------------------------------------------
0. 顯示影象檔案詳細資訊
gm identify a.jpg
 
1.更改當前目錄下*.jpg的尺寸大小,並保存於目錄.thumb裡面
gm mogrify -output-directory .thumbs -resize 320x200 *.jpg
 
2. 將三幅影象和併為一副影象
gm montage -mode concatenate -tile 3x1 image1.ppm image2.ppm image3.ppm concatenated.miff
 
3. 顯示影象
gm display 'vid:*.jpg'
 
4. 格式轉換
gm convert a.bmp a.jpg
gm convert a.bmp a.pdf(轉換為pdf)
 
5. 調整影象dpi和大小
gm convert -density 288 -geometry 25% image.gif image.gif
(縮小為原先的1/4,並且dpi為288)
 
gm convert -resize 640x480 image.gif image.gif
(轉換為640x480的影象)
 
6. 在影象上新增文字
gm convert -font Arial -fill blue -pointsize 18 -draw "text 10,10 'your text here'" test.tif test.png
 
7. 從gif檔案中抽取第一幀
gm convert "Image.gif[0]" first.gif
 
8. 建立gif影象
gm convert -delay 20 frame*.gif animation.gif
gm convert -loop 50 frame*.gif animation.gif
(讓動畫迴圈50次)
 
gm convert -delay 20 frame1.gif -delay 10 frame2.gif -delay 5 frame3.gif animation.gif
(對每一幀手動指定延時)
 
9. 截圖
gm import a.jpg
用滑鼠點選所要擷取的視窗,或者選擇截圖區域,儲存為a.jpg
 
gm import -frame a.jpg
保留視窗的邊框

GraphicsMagick常用管理命令
-----------------------------------------------------
檢視版本後安裝情況:gm identify -version
結果::打印出資訊

識別圖片:gm identify  /Users/zhaorai/Pictures/照片/100CANON-1/IMG_4108.JPG
結果:/Users/zhaorai/Pictures/照片/100CANON-1/IMG_4108.JPG JPEG 3648x2736+0+0 DirectClass 8-bit 2.5M 0.000u 0:01

識別圖片(高階):gm identify  -verbose /Users/zhaorai/Desktop/4.png
結果:打印出很多資訊。


GraphicsMagick縮放比例的精準控制
-----------------------------------------------------
原始圖片是input.jpg,尺寸:160x120

只縮小不放大
gm convert input.jpg -resize "500x500>" output_1.jpg
加了>,表示只有當圖片的寬與高,大於給定的寬與高時,才進行“縮小”操作。
生成的圖片大小是:160x120,未進行操作
如果不加>,會導致圖片被比等放大。

等比縮圖  (缺點:產生白邊)
gm convert input.jpg -thumbnail "100x100" output_1.jpg
生成的圖片大小是:100x75

非等比縮圖,按給定的引數縮圖(缺點:長寬比會變化)
gm convert input.jpg -thumbnail "100x100!" output_2.jpg
生成的圖片大小是:100x100

裁剪後保證等比縮圖 (缺點:裁剪了圖片的一部分)
gm convert input.jpg -thumbnail "100x100^" -gravity center -extent 100x100 output_3.jpg
生成的圖片大小是:100x100,還保證了比例。不過圖片經過了裁剪,剪了圖片左右兩邊才達到1:1

填充後保證等比縮圖 (缺點:要填充顏色,和第一種方法基本一樣)
gm convert input.jpg -thumbnail "100x100" -background gray -gravity center -extent 100x100 output_4.jpg
生成的圖片大小是:100x100,還保證了比例,同時沒有對圖片進行任何裁剪,缺失的部分按指定顏色進行填充。

裁剪、填充相結合 (缺點:最差的方法)
gm convert input.jpg -thumbnail "[email protected] -background gray -gravity center -extent 100x100 output_5.jpg
生成的圖片大小是:100x100,這次保證了大小和比例,其中的10000就是100x100的乘積,同時在填充和裁剪之間做了一個平衡。
 

位深度32 轉為24

IE6,7,8不支援顯示“位深度32”的圖片,但IE9、火狐、谷歌瀏覽器就可以顯示。

使用GM,把“位深度32”的圖片轉換為“位深度24”的圖片

輸入圖片zzz.jpg就是“位深度32”的圖片,輸出圖片 zzz_out.jpg就是“位深度24”的圖片

gm convert -resize 100x100 -colorspace RGB zzz.jpg zzz_out.jpg

轉完後,圖片的顏色會有輕微變化。

 

 

在瀏覽器上選擇圖片裁剪的座標

=================================
如果想讓使用者手動裁剪頭片的話,就是在瀏覽器上選擇圖片裁剪的座標,imgAreaSelect是個好選擇。
imgAreaSelect is a jQuery plugin for selecting a rectangular area of an image.
http://odyniec.net/projects/imgareaselect/

 

======================其它內容=================================

Jmagick銳化圖片功能

--------------------------------------------------
ImageInfo info = new ImageInfo(filepath+"pics.jpg");
MagickImage image = new MagickImage(info);
MagickImage sharpened = image.sharpenImage(1.0, 5.0);
sharpened.setFileName(filepath+"sharpened.jpg");
sharpened.writeImage(info);
主要是函式sharpenImage(double arg0, double arg1);
建議arg0=1.0 arg1=5.0
arg0為半徑  arg1為闕值
這樣做的目的:
明顯會使圖片變得清晰好看。

 

JMagick 常用技巧

--------------------------------------------

ImageMagick中使用+profile "*"   刪除圖片中不儲存附加資訊.

JMagick中,使用MagickImage類上的profileImage("*", null)方法,刪除圖片中不儲存附加資訊. 

刪除圖片中的ICC,ICM, IPTC,8bim等資訊

ImageMagick中使用-quality控制圖片的品質,

JMagick中,使用ImageInfo類上的setQuality(80)方法,控制圖片的品質

 

 在Web應用(Resin,Tomcat)使用ImageMagick

-----------------------------------------
如果要在Web應用(Resin,Tomcat)使用ImageMagick,

需要再執行時加入引數: -Djmagick.systemclassloader=no

或者在程式中寫入:System.setProperty("jmagick.systemclassloader", "no");