0

我正在围绕 OpenJPEG 本机库构建一个 java ImageIO 包装器。

我有一个有效的 ImageReader 实现。但是,我无法让 ImageIO 库自动加载我的实现。相反,我必须手动注册该类,然后它才能工作。

有人对如何让 ImageIO.scanForPlugins 正常工作有任何想法吗?

如果你想看一下代码,只需从这里克隆我的分支

https://github.com/CodecCentral/openjpeg/tree/java_imageio

里面有两个 maven 项目:一个供读者使用,一个供链接到读者的简单查看器使用。

您还可以在此处找到示例 Jpeg2000 文件:

https://github.com/CodecCentral/openjpeg-data

4

1 回答 1

2

您似乎缺少META-INF/services/服务注册表获取 Spi 类所需的资源。

资源是文本文件,需要以它们实现的 Spi 类命名(一个用于编写器,一个用于读取器),并且包含一行与您的 Spi 实现类的确切名称。

您需要以下文件(在 java_imageio/wrapping/java/openjp2/src/main/resources 中):

/META-INF/services/javax.imageio.spi.ImageReaderSpi

# File content (comments allowed)
org.openJpeg.JP2KOpenJpegImageReaderSpi

/META-INF/services/javax.imageio.spi.ImageWriterSpi

# File content (comments allowed)
org.openJpeg.JP2KOpenJpegImageWriterSpi

一些附加评论:虽然与注册没有直接关系,但我浏览了您的源代码,您的 Spi 类可能存在其他问题。

  • 为您inputTypes列出Filebyte[]URL虽然这些类型可能没问题,但ImageIO可能还需要您支持ImageInputStream(大多数读者只支持此)才能正常运行。请参阅 上的静态read方法ImageIO,以及它们是如何实现的。
  • canDecodeInput应该查看文件/流内容以识别格式“魔术”标识符或标题结构。如果您只是简单地返回true,您的读者将尝试解码任何内容Filebyte[]URL不管内容如何,​​而不会给其他读者正确阅读它们的机会。再说一次,我认为您必须支持ImageInputStream作为正常操作的输入。
  • (我假设硬编码的 JNI 路径只是临时的.. :-)
于 2013-10-08T19:28:21.980 回答