2016-11-09 155 views
0

我有一个Java程序,我添加了JAI Image I/O以支持TIFF图像格式。需要安装JAI Image I/O包。 https://java.net/projects/jai-imageio/

A)什么是工作的罚款

这个程序完全运行在Eclipse环境这个代码打印类名(我想这是一个负责)和返回true即TIFF图像作家被注册:

System.out.println(TIFFImageWriterSpi.class); 
    ImageIO.scanForPlugins(); 
    Iterator<ImageWriter> it = ImageIO.getImageWritersByFormatName("tiff"); 
    System.out.println(it.hasNext()); 

A)我的问题

打包项目使用gradle。产生的JAR包含负责TIFF处理类:

 com\github\jaiimageio\impl\plugins\tiff\TIFFImageWriter.class 
    com\github\jaiimageio\impl\plugins\tiff\TIFFImageWriterSpi.class 

不幸的是,执行时相同的代码,则it.hasNext()返回false,也就是说,它使用的ImageIO未能寄存器TIFF作家 .scanForPlugins(); * 和becasue这也是本抛出异常的:

Need to install JAI Image I/O package. https://java.net/projects/jai-imageio/ 

虽然JAI图像I/O已经在类路径(否则在Eclipse运行会失败)

+0

只是想知道,为什么你会选择TIFF而不是其他图像格式? – kevto

+0

'ImageIO.scanForPlugins()'使用'ServiceLoader'和JAR文件[Service Provider]扫描类路径上的插件(http://docs.oracle.com/javase/7/docs/technotes/guides/jar/ jar.html#Service_Provider)机制。仅编译类是不够的。你的JAR中是否还有相应的服务提供者配置文件(即'/ META-INF/services/javax.imageio.spi.ImageWriterSpi')?如果你这样做,它是否包含一行说'com.github.jaiimageio.impl.plugins.tiff.TIFFImageWriterSpi'? – haraldK

回答

0

使用此代码:

IIORegistry.getDefaultInstance().registerServiceProvider(
      new TIFFImageWriterSpi(), ImageWriterSpi.class); 

能够手动注册的ImageWriterSpi任何或的ImageReaderSpi即使当ImageIO.scanForPlugins();失败。