【问题标题】:Add/remove ImageReader from jar to ImageIO-registry将 ImageReader 从 jar 添加/删除到 ImageIO-registry
【发布时间】:2012-08-16 11:13:56
【问题描述】:

在 jar jai_imageio.jar 中有类:

com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader

所以我将 jai_imageio.jar(和 jai_core.jar、jai_codec.jar)添加到类路径中。但是 ImageIO 似乎无法访问此类。所以这段代码:

ImageIO.scanForPlugins();
IIORegistry.getDefaultInstance().registerApplicationClasspathSpis();
Iterator<ImageReader> ir = ImageIO.getImageReadersByFormatName("jpeg");
while(ir.hasNext()) {
    ImageReader r = ir.next();
    System.out.println("can read raster: " + r.canReadRaster());
    System.out.println(r);
}

产生以下输出:

can read raster: true
com.sun.imageio.plugins.jpeg.JPEGImageReader@54520eb

在 99% 的机器上。但在一台机器上,它会产生以下输出:

Can read raster: false
com.sun.media.imageioimpl.plugins.jpeg.CLibJPEGImageReader@163e9a1
Can read raster: true
com.sun.imageio.plugins.jpeg.JPEGImageReader@10cecb2

为什么会这样?我应该做更多的事情,只是将带有 ImageIO 插件的 jar 放在类路径上吗?我可以以某种方式从 ImageIO-Registry 中卸载 ImageReader 吗?

背景

实际上我的问题是一些外部不可更改的代码应该使用 ImageIO Registry 中的第一个 ImageReader 来读取光栅。但不幸的是,在一台 PC 上,第一个 ImageReader 是 CLibJPEGImageReader。 JDK 和 classpath 是相同的,因此 CLibJPEGImageReader 应该始终在注册表中,如果在 classpath 上放置一个带有插件的 jar 足以使其对 ImageIO 可见。

【问题讨论】:

    标签: java javax.imageio jai


    【解决方案1】:

    最可能的原因是您使用 CLibJPEGImageReader 的机器安装了 JAI ImageIO 库 (http://java.net/projects/jai-imageio)。

    为什么其他不起作用(除了显而易见的)是因为您在 64 位系统上安装了 32 位版本的库,而没有安装 multilib 库 (https://wiki.archlinux.org/index.php/Arch64_FAQ)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-19
      • 2019-09-03
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多