圖片處理服務 ImageMagick 的安裝和使用


簡介

該文章使用目前官方最新版本7.0.8,這里只記錄下Windows系統下的安裝。

官方網站http://www.imagemagick.org/script/index.php

ImageMagick是一套功能強大、穩定而且開源的工具集和開發包,可以用來讀、寫和處理超過200種基本格式的圖片文件,包括PNG,JPEG,GIF,HEIC,TIFF,DPX,EXR,WebP,Postscript,PDF和SVG等格式。利用ImageMagick,可以根據web應用程序的需要動態生成圖片, 還可以對一個(或一組)圖片進行改變大小、旋轉、銳化、減色或增加特效等操作,並將操作的結果以相同格式或其它格式保存,對圖片的操作,既可以通過命令行進行,也可以通過C/C++、Perl、Java、PHP、Python或Ruby編程來完成。ImageMagic的主要精力集中在性能,減少bug以及提供穩定的API和ABI上。

ImageMagick的功能通常通過命令行使用,也可以通過編程來使用。編程可以選擇通過這些接口調用:G2F (Ada),MagickCore (C),MagickWand (C),ChMagick (Ch),ImageMagickObject (COM+),Magick++ (C++),JMagick (Java),JuliaIO (Julia),L-Magick (Lisp),Lua (LuaJIT),NMagick (Neko/haXe),Magick.NET (.NET),PascalMagick (Pascal),PerlMagick (Perl),MagickWand for PHP (PHP),IMagick (PHP),PythonMagick (Python),magick (R),RMagick (Ruby),or TclMagick (Tcl/TK)。

下載

進入到Download頁面,往下翻,找到Windows版本文件的下載頁

會看到如下的下載列表(經過整理翻譯):

關於下載文件選擇:

內存大小是一個重要因素,特別是如果打算處理大型圖像。建議至少使用512MB的RAM,但RAM越大越好。ImageMagick不僅在單核計算機上運行良好,也可以在多核系統上自動並行運行,從而大大縮短了運行時間。

Windows版本的ImageMagick是自行安裝的。只需單擊下面的相應版本,它就會自動啟動並向您詢問一些安裝問題。

文件名稱中有Q8的版本是每像素8位分量(例如,8位紅色,8位綠色等),而文件名中的Q16是每像素16位分量。Q16版本允許您讀取或寫入16位圖像而不會丟失精度,但需要兩倍於Q8版本的計算機資源。

文件名中帶有dll的版本包括ImageMagick庫作為動態鏈接庫。

除非你的電腦是Windows32位操作系統,否則建議使用64位的Windows ImageMagick。

關於Q8,Q16的說明:

Q8表示: 8-bits per pixel quantum
Q16表示:16-bits per pixel quantum

使用16-bit在處理圖片時比8-bit慢15%至50%,並須要更多的內存。比如處理一張1024x768像素的圖片8-bit要使用3.6M內存,16-bit要使用7.2M內存。
計算方法是: (5 * Quantum Depth * Rows * Columns) / 8
8-bit可表示0-255種值,16-bit可表示0-65535種值。默認值是8-bit。大多數電腦顯示使用8-bit per pixel quantums。現代數碼相機照的相片,每一種顏色就是8位深,3種顏色就是24位,選Q8的話也可以滿足使用要求,同時可節省計算機資源。

這里我們選擇下載官方推薦的文件,也就是第一個:ImageMagick-7.0.8-12-Q16-x64-dll.exe

下載到桌面上的文件:

安裝

選擇好安裝目錄后,一直點Next就行,安裝完圖標。這個7.0版本的安裝選項和之前的6點幾版本有些不同,系統環境變量都是自動配置好的。

使用

圖形程序使用

圖形程序中涉及到的圖片操作菜單主要是View和Transform,下面簡單介紹翻譯下這兩個菜單。

Half Size  一半大小

Original Size  原始尺寸

Double Size  雙倍尺寸

Resize...  自定義尺寸

Toolbar  工具欄

Status Bar  狀態欄

Crop  裁切,保留所選部分Rol

Chop  裁切,去掉所選部分,然后把剩余的圖片進行拼接

Filp  上下翻轉

Flop  左右翻轉

Rotate Right  向右旋轉90度

Rotate Left   向左旋轉90度

Rotate...  旋轉指定度數

Shear...  設置X軸角度和Y軸角度

Roll...  設置水平像素和垂直像素

Trim Edges  修剪邊緣

命令行使用

上面說過,IM的大部分功能都是基於命令行使用的,所以最全的使用方式應該是命令行方式。

各個命令的詳細說明可以直接參考這個地址:https://www.w3cschool.cn/imagemagick_use/

參考官方說明:

IM命令行結構剖析:

ImageMagick命令行包含

1、一個或多個必需輸入的文件名。

2、零個,一個或多個圖像設置。

3、零個,一個或多個圖像運算符。

4、零個,一個或多個圖像序列運算符。

5、零個,一個或多個圖像堆棧。

6、零個或一個輸出圖像文件名。(convert,composite,montage,compare,import,conjure,這些命令需要)

注意:直接寫convert,如果命令行如果提示找不到convert命令的話,把目錄下的magick.exe拷貝一份命名convert.exe,這樣就可以直接使用convert了,不用寫magick了

IM命令行的簡單使用:

打開CMD命令行窗口,進入圖片所在目錄(我的測試圖片在桌面的test文件夾里)

C:\Users\Administrator>cd C:\Users\Administrator\Desktop\test

C:\Users\Administrator\Desktop\test>magick test.jpg test1.png

magick test.jpg test1.png  表示把test.jpg這個圖片另存一份為test1.png,同時修改了圖片名稱和格式。

magick label.gif +matte \
  \( +clone  -shade 110x90 -normalize -negate +clone  -compose Plus -composite \) \
  \( -clone 0 -shade 110x50 -normalize -channel BG -fx 0 +channel -matte \) \
  -delete 0 +swap  -compose Multiply -composite  button.gif");

上面的命令是在Linux下的寫法,命令足夠長,必須跨多行寫入,Linux使用的是\,Windows使用的是^,另外Windows下的命令行中對於括號不需要轉義,則命令格式如下:

magick label.gif +matte ^
  ( +clone  -shade 110x90 -normalize -negate +clone  -compose Plus -composite ) ^
  ( -clone 0 -shade 110x50 -normalize -channel BG -fx 0 +channel -matte ) ^
  -delete 0 +swap  -compose Multiply -composite button.gif

上面的命令對圖片紋理進行了豐富和色彩進行了加深。

magick *.jpg images.gif

將當前目錄下所有jpg圖片合成一個gif動畫,我合成了個靜態圖片

magick -size 640x480 -depth 8 rgb:image image.png

后面還有好多的命令,詳細信息請參考官方網站說明。

程序接口使用

這里只說一下Java相關的工具。Java可調用接口有兩種,JMagick和Im4java。JMagick為ImageMagick提供了面向對象的Java接口。Im4java是ImageMagick命令行的純java接口。

1、JMagick

JMagick是一個開源API,利用JNI(Java Native Interface)技術實現了對ImageMagick API的Java訪問接口,因此也將比純Java實現的圖片操作函數在速度上要快。JMagick只實現了ImageMagic API的一部分功能,它的發行遵循LGPL協議。

目前JMagick只有32位的,所以只能選擇32位的ImageMagick,並且版本支持很低,目前只支持到ImageMagick-6.3.9-0,只能使用32位的JDK,64位進程不能夠調用32位的dll,想在64位的系統上用jmagick不僅要將jdk換成32位,而且jmagick.dll也得放到SysWOW64下面,不能放到System32中。

具體使用可參考我的另一篇博客:JMagic 操作 ImageMagick 處理圖片

2、Im4java

Im4java是ImageMagick的另一個Java開源接口。與JMagick不同之處在於Im4java只是生成與ImageMagick相對應的命令行,然后將生成的命令行傳至選中的IM-command(使用java.lang.ProcessBuilder.start()實現)來執行相應的操作。它支持大部分ImageMagick命令,可以針對不同組的圖片多次復用同一個命令行。

Im4java只是封裝ImageMagick的命令。所以不需要依賴dll,也不存在64位系統調用32位dll的問題,而且Im4java支持GraphicsMagick,GraphicsMagick是ImageMagick的分支。且Flickr和Etsy都要使用它。相對ImageMagick,GraphicsMagick更穩定,消耗資源更少。最重要的是不依賴dll環境。

具體使用可參考我的另一篇博客:Im4java 操作 ImageMagick 處理圖片


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM