需要帮助加载ImageIO的插件读写器

时间:2013-10-08 02:21:31

标签: java javax.imageio

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

我有一个有效的ImageReader实现。但是,我无法得到 ImageIO库自动加载我的实现。相反,我有 手动注册类,然后它可以工作。

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

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

资源是文本文件,需要在它们实现的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应该查看文件/流内容以识别格式" magic"标识符或标题结构。如果您只是返回true,则无论内容如何,​​您的读者都会尝试解码任何Filebyte[]URL,而不会让其他读者有机会正确阅读它们。而且,我认为你必须支持ImageInputStream作为正常操作的输入。
  • (我假设硬编码的JNI路径只是暂时的...... :-)