【问题标题】:Save Base64 decoed image on file system将 Base64 解码图像保存在文件系统上
【发布时间】:2014-12-19 17:43:06
【问题描述】:

我在我的 spring mvc 应用程序中将我的图像作为 base 64 解码字符串。例如

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABUUAAAkFCAYAAAD3GsjUAAAgAElEQVR4nOy9eXSb932vqc50fJs2Z+6ZOefeO2dmbm/aSW9ve+MmrZv2Nmmm7TROs7q2Yzl2HNWxtmihZNmSLMd24t=

我正在尝试将其保存为 png 图像:

byte[] imageByte = Base64.decodeBase64(base64encodedImage);    
String directory = "D:\\Image Capture\\sample.png";
FileOutputStream outputStream = new FileOutputStream(directory);            
outputStream.write(imageByte);
outputStream.flush();
outputStream.close();

但它正在将我的图像另存为

我无法弄清楚原因。此编码图像是使用 JavaScript 中的 canvas.toDataUrl 获得的。它完美地在浏览器选项卡中打开。

【问题讨论】:

  • 每张图片都有一个格式。你的有哪一个?你说你想把它保存为PNG,但它目前是哪种格式?如果你有它,例如 JPG,那么你首先必须将它转换为 PNG。因此,您的步骤是:1. 解码 Base64,2. 将 X 格式转换为 PNG,3. 保存文件。
  • @Socrates :从编码的图像数据中我可以看到它是 png,因为它以 data:image/png 开头
  • 尝试一件事!获取现有的工作 PNG 并将其编码为 Base64。然后使用上面的 Java 代码并再次解码。这样你就可以看到功能了!

标签: java spring-mvc base64


【解决方案1】:

我终于想通了。

回答 this 链接有帮助。

我收到的编码图像:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABUUAAAkFCAYAAAD3GsjUAAAgAElEQVR4nOy9eXSb932vqc50fJs2Z+6ZOefeO2dmbm/aSW9ve+MmrZv2Nmmm7TROs7q2Yzl2HNWxtmihZNmSLMd24t=

编码图像部分在以下短语之后开始:

data:image/png;base64,

我不得不跳过那个字符串然后解码图像。

我还从同一个线程中发现,额外的字符串不应该阻止我们解码。

在同一个论坛中,建议使用一种方法,在转换编码图像时用户:

InputStream stream = new ByteArrayInputStream(Base64.decode(image.getBytes(), Base64.DEFAULT));

请参阅同一线程中@Wand Maker 的回答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 2011-01-20
    • 2021-04-05
    相关资源
    最近更新 更多