== 这是 中国WEB信息博物馆Web InfoMall 2004年05月04日 存储的网页 ==
点击这里查看本网页的其他版本 隐藏InfoMall信息

竹笋炒肉: Jmagick学习笔记

October 29, 2003

Jmagick学习笔记

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

Posted by Hilton at October 29, 2003 12:13 AM | TrackBack
Comments

然后我把所有的*.dll文件全部COPY到system32目录下,结果,它不报错了,直接把WEB服务器给搞停了。

Posted by: rosen at April 27, 2004 01:42 PM

已经按照各位的方法,但还是不行,报错:无法找到动态链接库CORE_RL_magick_.dll。

Posted by: rosen at April 27, 2004 01:21 PM

Sorry 心急看错了!!!

Posted by: rosen at April 27, 2004 12:32 PM

JMagick包内没有PicResize.java类,而我恰恰需要缩略图功能!

Posted by: rosen at April 27, 2004 12:24 PM

to Hilton
我装了imagemagick6,然后也把jmagick.dll拷到system32下,但是为什么运行时还是报错啊。报错:无法定位程序输入点DestroyMagickInfo于动态链接库CORE_RL_magick_.dll上

Posted by: heyq at April 21, 2004 02:40 PM

today is my birthday :)

Posted by: t-shirts-man at April 6, 2004 05:20 PM

我明明在windowsXP的 cmd 中 运行 class文件,是可以处理图片的,但是为什么放到 tomcat 里面去运行,就报Internal error() 呢???
而且internal error() 那一大串的东西,我根本看部懂,又不是说找不到 什么其他的类,
啊!! 烦啊!!! 大哥指教一下好吗???

Posted by: Sean CWJ at April 3, 2004 06:42 PM

楼上这位朋友我现在正在看imageJ的东西,但一下子没有搞好,想得到你的帮助呀!
联系一下!QQ 4414155

Posted by: david at March 23, 2004 11:07 AM

先装ImageMagick.

Posted by: Hilton at February 18, 2004 01:19 PM

我在LINUX下安装他出现Unable to find ImageMagick header files
这是怎么回事?然后跳出安装。我是在他主页上下载了安装的。试了两个版本都如此。

Posted by: huifei at February 18, 2004 01:15 PM

To Hilton :

谢谢你的帮助。

BTW,与初用者分享一点:win环境下,只下载jmagick.jar和jmagick.dll是不够的,还需要下载其他的dll一起使用才可以,给大家一个链接http://www.yeo.id.au/jmagick/quickload/win-5.5.7/ImageMagick-5.5.7-Q8-windows-dll.exe,安装后记得要重新启动pc。我听从下面前辈的也将jmagick.dll放在了system32目录下面了。

Posted by: ryan at January 13, 2004 10:56 AM

To ryan;

  在$JAMGICKHOME/src/test目录下。我把它打了个包,你也可以从 http://hedong.3322.org/archives/docs/test.tar.gz 下载。

Posted by: Hilton at January 12, 2004 11:52 AM

你们说的Test.java在哪儿?

Posted by: ryan at January 12, 2004 11:44 AM

//…………………………………………………………
我在JmagicK的主页上找不到JmagicK实现的API的有关文档,所以还是不知道具体怎么用JmagicK,请问版主那里有文档吗?或者有其他助于学JmagicK的好东东。

Posted by: zhm at December 12, 2003 08:39 AM
//…………………………………………………………

zhm,你可以去下载http://www.yeo.id.au/jmagick/quickload/JMagick-5.5.1-bin-win32.zip
这个包,里面包括了doc。

Posted by: at January 12, 2004 11:39 AM

about java.lang.UnsatisfiedLinkError: no JMagick in java.library.path.
copy libJMagick.so $resin_home/lib

Posted by: 汤汤 at January 2, 2004 12:14 PM

imagesj
应用

Posted by: QQ吧精彩 at December 30, 2003 01:12 PM

老板又要我研究用JMagicK做动画,又要研究了。。。。。

Posted by: zhm at December 24, 2003 06:48 PM

To zhm;

  祝贺你安装jmagick成功!

  去http://www.dependencywalker.com/ 下载这个程序,安装运行它,然后利用其"open"功能打开要看的程序就可以了。

Hilton

Posted by: Hilton at December 19, 2003 01:32 PM

问一下版主,怎么用depends看一个dll依赖于哪些文件?谢谢。

Posted by: zhm at December 19, 2003 10:22 AM

呵呵,我的也是在Windows下运行的,折腾了一个星期,总算成功了,要把那个jmagick.dll考到系统的System32目录下面,然后下载一个ImageMagick-5.5.7-Q16-windows-dll.exe安装了,一切都OK了。

Posted by: zhm at December 19, 2003 10:21 AM

呵呵,我的也是在Windows下运行的,折腾了一个星期,总算成功了,要把那个jmagick.dll考到系统的System32目录下面,然后下载一个ImageMagick-5.5.7-Q16-windows-dll.exe安装了,一切都OK了。

Posted by: zhm at December 19, 2003 10:21 AM

是不是需要装imagemagick?
你用depends看看,这个dll依赖于哪些文件?

真不好意思,我用jmagick是在linux下的,所以对windows下的东东不是很熟悉。

Hilton

Posted by: Hilton at December 13, 2003 09:39 PM

我把jmagick.dll和jmagick.jar都放到system32下但出现java.lang.UnsatisfiedLinkError: C:\WINDOWS\system32\JMagick.dll: Can't find dependent libraries。我是在IDEA开发中调用的,总是不成功,为什么jmagick还要有dll?不象其他java的工具包?

Posted by: at December 13, 2003 11:59 AM

To zhm,

JMagick的文档确实很少,你可以参考http://www.yeo.id.au/cgi-bin/jmagick/fom 。或去ImageMagick的主页看一下,因为jmagick仅是对imagemagick的一个java包装。

  另外,这个包中的Test.java,把几乎所有的功能都演示了一下,也可以看看。

Hilton

Posted by: Hilton at December 12, 2003 08:45 AM

我在JmagicK的主页上找不到JmagicK实现的API的有关文档,所以还是不知道具体怎么用JmagicK,请问版主那里有文档吗?或者有其他助于学JmagicK的好东东。

Posted by: zhm at December 12, 2003 08:39 AM

放在运行程序时的当前目录,或者放到windows的system32目录下试试。

Posted by: Hilton at December 11, 2003 10:00 PM

请问我在运行是出现java.lang.UnsatisfiedLinkError: no JMagick in java.library.path错误。jmagick.dll应该怎么用?

Posted by: at December 11, 2003 06:11 PM

你好,我最近也在看基于JAVA的图像处理:
你看看这个如何:ImageJ
http://rsb.info.nih.gov/ij/

我想利用这个包将图片动态生成各种幅面的缩略图(包含站点水印)。然后图片可以通过PATH_INFO解析参数,比如生成一个200*150的水印:
http://www.chedong.com/thumb/200/150/orig.jpg
然后再在前台用SQUID缓存住。

Posted by: Che Dong at November 1, 2003 10:28 PM
Post a comment









Remember personal info?