【问题标题】:Using ImageIO to convert from JPEG2000 to PNG使用 ImageIO 将 JPEG2000 转换为 PNG
【发布时间】:2016-05-19 10:40:56
【问题描述】:

我正在尝试将 JPEG2000 (.jp2) 图像转换为其他格式(JPEG 或 PNG),因此我尝试使用 javax.imageio 包的写入方法。这适用于其他格式(例如 JPEG 到 PNG),但是当涉及 JPEG2000(或 TIFF)时,它会引发异常。谁能告诉我输入图像的可能格式是什么?

Exception in thread "main" java.lang.IllegalArgumentException: im == null!
    at javax.imageio.ImageIO.write(ImageIO.java:1457)
    at javax.imageio.ImageIO.write(ImageIO.java:1565)
    at decodeincodeimages.AndroidInterface.convertFormat(AndroidInterface.java:199)
    at Main_package.Execute.main(Execute.java:69)

Java Result: 1

这就是方法:

public static boolean convertFormat(String inputImagePath,
        String outputImagePath, String formatName) throws IOException {
    FileInputStream inputStream = new FileInputStream(inputImagePath);
    FileOutputStream outputStream = new FileOutputStream(outputImagePath);

    // reads input image from file
    BufferedImage inputImage = ImageIO.read(inputStream);

    // writes to the output image in specified format
    boolean result = ImageIO.write(inputImage, formatName, outputStream);

    // needs to close the streams
    outputStream.close();
    inputStream.close();

    return result;
}

我这样称呼它:

System.out.println(AndroidInterface.convertFormat("g:\\picture.jp2","g:\\conv.gif", "gif"));

【问题讨论】:

标签: java javax.imageio jpeg2000


【解决方案1】:

ImageIO 内置以下格式:BMP、GIF、JPEG、PNG、WBMP(来源:the API documentation)。如果您尝试读取不同格式的图像,ImageIO.read(...) 方法将简单地返回 null,这就是您稍后在方法中获得 IllegalArgumentException: im == null 的原因。

不过,ImageIO 也使用插件机制(服务提供者接口,或 SPI),以允许安装额外或第三方插件。

要能够读取 JPEG2000 或 TIFF,您需要这样的插件。

  • 对于 JPEG2000,最好的选择可能是 JAI。 JAI 还有一个 TIFF 插件。 JAI 由 Sun(现为 Oracle)开发,但遗憾的是,多年来一直没有更新和错误修复。

  • 还有用于 OpenJPEG 的 Java 绑定,其中应包含用于 JPEG2000 的 ImageIO 插件。

  • 对于 TIFF,您还可以使用我的 TwelveMonkeys ImageIO TIFF 插件。 TwelveMonkeys 目前没有 JPEG2000 插件,所以它可能对你没那么有用。

(此列表并不详尽,Google 可能会帮助您找到更多信息 :-))

PS:从 Java 9 (JEP-262) 及更高版本开始,还内置了 TIFF 格式支持。

【讨论】:

    【解决方案2】:

    您可以使用imageio-openjpeg 作为 ImageIO API 的插件。 (https://github.com/dbmdz/imageio-jnr)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-15
      • 2020-06-14
      相关资源
      最近更新 更多