我有一个java程序,我添加了JAI图像I/O来支持TIFF图像格式。
A) What is working fine
该程序在Eclipse环境中完美运行,该代码打印类名(我认为它是负责的),并且返回true即TIFF图像编写器已注册:
System.out.println(TIFFImageWriterSpi.class);
ImageIO.scanForPlugins();
Iterator<ImageWriter> it = ImageIO.getImageWritersByFormatName("tiff");
System.out.println(it.hasNext());
A) My Issue
我使用gradle打包项目。生成的JAR包含负责TIFF处理的类:
comgithubjaiimageioimplpluginstiffTIFFImageWriter.class
comgithubjaiimageioimplpluginstiffTIFFImageWriterSpi.class
不幸的是,当执行相同的代码时,it. hasnext ()返回false,即使用ImageIO.scanForPlugins();*未能注册TIFF写入器因此也抛出了这个异常:
Need to install JAI Image I/O package. https://java.net/projects/jai-imageio/
尽管JAI映像I/O已经在类路径中(否则Eclipse运行将失败)
使用以下代码:
IIORegistry.getDefaultInstance().registerServiceProvider(
new TIFFImageWriterSpi(), ImageWriterSpi.class);
可以手动注册任何ImageWriterSpi或ImageReaderSpi,即使当ImageIO.scanForPlugins();失败。