background image

Java 入门:用 JAI 扩展 Java 的图像处理能力

  Java 的图像处理能力不断地在增长,但是将一个如 PNG 或者 JPEG 格式的文件写入
磁盘或从磁盘读取这样的操作仍然是一种巫术。解决方案是使用 Java Advanced 
Imaging(JAI)API。JAI 可以在 Sun 的 Java 网站下载,在 JDK1.4 的 javax.imageio 包里已经包
括了它。
有针对 Windows 平台的 exe 格式的 JAI

 

安装文件可以下载, 但是没有针对 UNIX 和 Linux

的安装文件。尽管 JAI 可以在纯 Java 模式下运行,但它也为 Windows、Linux、UNIX 提供了
本地库,使用它们可以提高运行速度。
下面的例子是安装在 Apple 机的 OS X 系统上的,因此我们选择了纯 Java 模式。为了安装
JAI,你需要一个 jai tar.gz 文件。把三个重要的 jar 文件 mlibwrapper_jar.jar、jar_codec.jar 和
jar_core.jar 移到你的 classpath 环境变量指定的目录下。我们推荐把它们放到你的 JDK 的
jre/lib/ext 目录下。
实际上 JAI 是 Java 中的一个临时系统。这里只有一个名为 JAI 的顶层类和很少的几个辅助
方法,而没有很多方法让人去学习。这些方法里的第一个参数是操作名,所以代码象这样:
src = JAI.create("fileload", .. );
JAI.create("extrema", src, ...);
JAI.create("histogram", src, ...);
 
这样的系统在使它与你自己的或者第三方的功能可以很容易结合在一起的同时也使得类
型间的耦合更松散,这进而使得在这之下的开发更困难。
将一个 AWT 图形转换成一个 PNG 文件需要下列的代码片断:
import java.awt.Image;
import java.awt.image.renderable.ParameterBlock;
import javax.media.jai.JAI;
import javax.media.jai.PlanarImage;
.....
Image img = ....
OutputStream out = ....
ParameterBlock pb = 

new

 ParameterBlock().add(img);

PlanarImage src = (PlanarImage) JAI.create("awtImage", pb);
JAI.create("encode", src, out,"PNG", null);
 
以上的例子演示了两种给 create 方法传参数的方法,其中较新的方法是使用一个包含了
所有参数的 ParameterBlock,我们在对 awtImage 的操作中是这么做的。旧的方法使用的是
一个重载的方法,它现在是 deprecated(即被替代的旧方法,不推荐使用的)方法,但在这
个例子中,我们为 encode 操作使用了它。
上面的代码会将一个图像按 PNG 格式编码并写到 OutputStream 中去。如果你想对 JAI 进行
进一步的了解,我们强烈推荐你去读 JAI 指南。