gpt4 book ai didi

java - 使用 ImageIO 将 JPEG2000 转换为 PNG

转载 作者:行者123 更新时间:2023-12-01 18:04:54 33 4
gpt4 key购买 nike

我正在尝试将 JPEG2000 (.jp2) 图像转换为其他格式(JPEG 或 PNG),因此我尝试使用 javax.imageio 包的 write 方法。这对于其他格式(例如 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"));

最佳答案

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

但是,ImageIO 还使用插件机制(服务提供商接口(interface),或 SPI),以允许安装额外或第三方插件。

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

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

  • 还有 OpenJPEG 的 Java 绑定(bind),其中应包含 JPEG2000 的 ImageIO 插件。

  • 对于 TIFF,您还可以使用我的 TwelveMonkeys ImageIO TIFF 插件。 TwelveMonkeys 目前没有 JPEG2000 插件,因此它对您来说可能不太有用。

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

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

关于java - 使用 ImageIO 将 JPEG2000 转换为 PNG,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37320814/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com