JMagick是一個開源API,利用JNI(Java Native Interface)技術實現了對
ImageMagickAPI的Java訪問接口,因此也將比純Java實現的圖片操作函數在速度上要快。JMagick只實現了ImageMagicAPI的一部分功能,它的發行遵循
LGPL協議。
ImageMagick請參考其
官方網站或
ImageMagick學習。
下載安裝
安裝要求:
- 如果通過CVS下載的源碼,則需要GNU Autoconf
- GNU Make 3.77或更新版本(我用的是3.7.9).
- 一個ANSI C 編譯器,建議用 GNU 或 EGCS 的編譯器
- ImageMagick 5.5.6或更新版本
- Java2 JDK( JMagick是在 Sun JDK 1.4.1上開發,但運行好象不用那么高,我用的是1.3.1)
下載過程如下:
用CVS取源碼:
cvs -d :pserver:anonymous@jmagick.yeo.nu:/var/cvs/jmagick login
Password: jmagick
cvs -d :pserver:anonymous@jmagick.yeo.nu:/var/cvs/jmagick checkout Jmagick
也可以直接下載JMagick-5.5.6-X.tar.gz包。
根據INSTALL文檔指示,編譯如下:
對下載包:
tar zxvf Jmagick-5.5.6-X.tar.gz
cd Jmagick-5.5.6-X
對CVS取回來的源碼
cd JMagick
autoconf
以下為兩種情況都相同的部分
./configure
make all
su
make install
make javadoc
make test <--如果x-win沒有啟動,大部分測試是成功的,但也會顯示一些錯誤信息,因為沒法顯示圖片。
通過JMagick,實現JSP上傳圖片文件后生成縮略圖的功能
Jmagick自身帶的Test.java程序,演示了如何使用JMagick來實現圖片的復制、信息獲取、斜角、特效、組合、改變大小、加邊框、旋轉、切片、改變格式、去色等等功能,編程的重要參考。
下面主要描述如何實現將用JSP上傳的圖片,進行壓縮生成縮略圖。用jsp上傳文件的全部代碼,參見利用apache-commons-fileupload寫jsp上傳文件,下面只描述圖片壓縮的實現。
$TOMCATHOME/webapps/yourproject/WEB-INF/classes/com/hedong/JMagick/PicResize.java
package com.hedong.JMagick;
import org.apache.log4j.*;
import java.awt.Dimension;
import java.awt.Rectangle;
import magick.ImageInfo;
import magick.MagickImage;
import magick.MagickException;
import magick.QuantizeInfo;
import magick.ColorspaceType;
import magick.MagickApiException;
import magick.PixelPacket;
import magick.DrawInfo;
import magick.ResolutionType;
import magick.ProfileInfo;
import magick.MontageInfo;
import magick.Magick;
import magick.MagickInfo;
import java.io.IOException;
import java.io.FileOutputStream;
public class PicResize {
static Logger logger = Logger.getLogger(PicResize.class.getName());
public void resize(String picFrom,String picTo) {
try {
// Resize
ImageInfo info = new ImageInfo(picFrom);
MagickImage image = new MagickImage(new ImageInfo(picFrom));
MagickImage scaled = image.scaleImage(100, 80);//小圖片文件的大小.
scaled.setFileName(picTo);
scaled.writeImage(info);
logger.info("alter pic form "+picFrom +" to "+picTo);
} catch(MagickApiException ex) {
logger.error("MagickException: " + ex + ": " + ex.getReason() + ", " + ex.getDescription());
} catch(MagickException ex) {
logger.error("MagickException: " + ex);
}
}
}
注意,需要將編譯JMagick生成的lib/jmagick.jar包,復制到$TOMCATHOME/webapps/yourproject/WEB-INF/lib目錄下。