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目录下。