【问题标题】:Convert Base64 to image file in png format without saving the file. Possible将 Base64 转换为 png 格式的图像文件而不保存文件。可能的
【发布时间】:2015-02-01 15:05:23
【问题描述】:

我正在使用 Apache httpclient 调用 REST Web 服务。此服务以 base64 格式返回图像。我想将其转换为 png 格式的图像,但我不想保存此图像文件。原因是有超过 10000 个用户,如果我继续保存所有图像,它会消耗大量内存。

我使用的是 JDK 1.7

有没有可能做到这一点?

【问题讨论】:

  • 这可能是相关的:stackoverflow.com/questions/7178937/…
  • 图片的开始格式是什么,在客户端的base64字符串中??
  • 您可以使用流将所有内容放在内存中(无需写入磁盘),但它所使用的内存是图像本身所需空间的一倍以上。

标签: java


【解决方案1】:

应该不难 - 您可以使用基于内存的流而不是基于文件的流:

  1. 使用例如解码 base64 图像Apache Common's codec,转换成字节数组。
  2. 使用ByteArrayInputStream从字节数组创建一个输入流。
  3. 通过ImageIO.read从流中读取图像
  4. 保存到 PNG 并作为流输出到客户端。

【讨论】:

  • 感谢您的回复。您能否为此提供一个代码 sn-p。我对此很陌生,真的不知道。如果您需要任何进一步的信息,请告诉我。
【解决方案2】:

从任何格式创建一个 BufferedImage 实例,假设 ImageIO 支持...我猜这是来自磁盘 - 你没有在你的问题中说

    BufferedImage original = ImageIO.read(new FileInputStream("test.png"));

以 PNG 格式写入 ByteArrayOutputStream

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ImageIO.write(original, "png", outputStream);

将结果字节数组转换回base64。

String output = DatatypeConverter.printBase64Binary(outputStream.toByteArray());
System.out.println(output);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 2022-06-27
    • 2022-01-24
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多