使用im4java生成gif的缩略图

jmagick生成的gif图,在ie浏览器中无法播放(见使用jmagick做gif动画的缩略图),所以又测试了一下im4java(http://im4java.sourceforge.net/)。

下载了最新的编译版本。im4java的思路是通过线程或者进程执行imagemagick的命令,它的api只是为了能生成命令,而不是调用imagemagick的库。

这种处理的好处是,如果是服务器程序需要图片转换功能,单开native进程处理,不会造成该服务器程序jvm进程的内存溢出错误。

im4java只需安装imagemagick即可,因为是要用它的命令行工具convert。

代码很简单,下面是示例:

import org.im4java.core.ConvertCmd; import org.im4java.core.IMOperation; import org.im4java.process.StandardStream; public class Demo { public static void main(String[] args) throws Exception { IMOperation op = new IMOperation(); op.addImage(); op.resize(64, 64); op.addImage(); ConvertCmd convert = new ConvertCmd(); convert.setErrorConsumer(StandardStream.STDERR); convert.run(op, args[0], args[1]); } }

im4java需要看README文件,和它提供的测试类Test。

将程序打成jar包,就可以执行:

java -jar convert.jar 1.gif 2.gif

其中1.gif是需要转换的,2.gif是转换的结果。会将1.gif转换64×64的2.gif。

遗憾的是,这个程序暂时无法在win xp环境下运行,在ubuntu下运行正常,生成的2.gif可以在ie中正常播放。

估计问题出在im4java代码,可能只在linux或者osx上测试。因为报错是带汉字的:无效的参数 – -resize。windows下创建进程的环境部分可能和linux有差异,被im4java作者忽略了。

創建PDF格式    发送文章为PDF   

1 Comment to “使用im4java生成gif的缩略图”

  1. By Marshal, 2009年10月13日 @ 20:19

    默认情况下,采用的是同步的方式调用命令行进程。即等待命令行进程结束后(阻塞线程等待该矜进程结束),再继续执行。

    如果需要发起命令行进程后不等待它的结束继续执行线程下面的代码,即异步的,需要:convert.setAsyncMode(true);

这篇文章上的评论的 RSS feed TrackBack URI

Leave a Reply