gpt4 book ai didi

java - 使用 IOUtils 和 ImageIO 写入图像文件有什么区别

转载 作者:行者123 更新时间:2023-11-29 05:42:07 24 4
gpt4 key购买 nike

我有一个 tiff 图像作为 Base64 编码的字符串存储在一个文件中。我的目标是从中创建一个 tiff 文件。这就是我正在做的:

String base64encodedTiff = IOUtils.toString(new FileInputStream("C:/tiff-attachment.txt"));    
byte[] imgBytes = DatatypeConverter.parseBase64Binary(base64encodedTiff);
BufferedImage bufImg = ImageIO.read(new ByteArrayInputStream(imgBytes));
ImageIO.write(bufImg, "tiff", new File("c:/new-darksouls-imageIO-tiff.tiff"));

ImageIO.write() 抛出 IllegalArgumentException 因为 bufImg 为空。我不明白我在这里做错了什么。

相反,如果我使用 IOUtils 来写,它工作正常:

IOUtils.write(imgBytes, new FileOutputStream("c:/new-darksouls-io-tiff.tiff"));

请帮助我理解

  1. 为什么 ImageIO 抛出异常
  2. 什么是正确的 API 和实现我想要实现的目标的方法。

最佳答案

例如,如果您想将 PNG 转换为 JPEG,ImageIO 会很有用。由于您不需要操作图像或转换为另一种格式,因此不必为 ImageIO 而烦恼。只需使用 IOUtils.write() 逐字保存 TIFF 数据。

ImageIO.read() 返回空图像,因为它无法读取 TIFF 文件,这可能是因为 TIFF 不是标准的 ImageIO 插件格式之一。此处列出了标准支持的图像格式:

http://docs.oracle.com/javase/6/docs/api/javax/imageio/package-summary.html

附加说明——您发布的代码在内存中缓冲了整个图像。如果您担心有效使用内存,请考虑使用某种 Base64 解码输入流来动态执行解码。这可能看起来像这样:

try (FileOutputStream out = new FileOutputStream("c:/new-darksouls-io-tiff.tiff");
FileInputStream in = new FileInputStream("C:/tiff-attachment.txt");
Base64InputStream decodedIn = new Base64InputStream(in)) {

IOUtils.copy(decodedIn, out);
}

关于java - 使用 IOUtils 和 ImageIO 写入图像文件有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17095739/

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