竹笋炒肉: Jmagick学习笔记

来源:互联网 发布:配货软件 编辑:程序博客网 时间:2024/04/28 00:36
导读:


  JMagick是一个开源API,利用JNI(Java Native Interface)技术实现了对ImageMagickAPI的Java访问接口,因此也将比纯Java实现的图片操作函数在速度上要快。JMagick只实现了ImageMagicAPI的一部分功能,它的发行遵循LGPL协议
  ImageMagick请参考其官方网站ImageMagick学习



下载安装

  安装要求:

  1. 如果通过CVS下载的源码,则需要GNU Autoconf

  2. GNU Make 3.77或更新版本(我用的是3.7.9).

  3. 一个ANSI C 编译器,建议用 GNU 或 EGCS 的编译器

  4. ImageMagick 5.5.6或更新版本

  5. 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上传文件,下面只描述图片压缩的实现。

<%@ page language="java" contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>
<%@ page import="com.hedong.JMagick.PicResize" %>

<%

String filename="123456789.jpg";

String updir="/uploadpics/2003/";

String filepath = getServletContext().getRealPath(updir);//<---好象在tomcat下getrealpath有点问题

String picFrom=filepath+"/"+filename;//大图片的文件名

String picTo=filepath+"/small-"+filename;//小图片的文件名.

try {

PR.resize(picFrom,picTo);//进行压缩,具体的实现在PicResize这个bean实现。

} catch(Exception e){

logger.error(e.toString());

}%>

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

本文转自
http://hedong.3322.org/archives/000341.html