NodeJS:将base64编码的图像保存到磁盘

我的Express应用程序正在从浏览器(使用toDataURL()从canvas生成)中接收base64编码的PNG,并将其写入文件。但是该文件不是有效的图像文件,因此“文件”实用程序只是将其标识为“数据”。

var body = req.rawBody,
  base64Data = body.replace(/^data:image\/png;base64,/,""),
  binaryData = new Buffer(base64Data, 'base64').toString('binary');

require("fs").writeFile("out.png", binaryData, "binary", function(err) {
  console.log(err); // writes out file without error, but it's not a valid image
});
小胖Gil2020/03/24 19:05:36

我还必须保存作为数据URL一部分的Base64编码的图像,因此我最终制作了一个小的npm模块来执行此操作,以防万一我(或其他人)将来需要再次执行此操作。叫做ba64

简而言之,它使用带有Base64编码图像的数据URL,并将图像保存到文件系统中。它可以同步或异步保存。它还具有两个帮助器功能,一个用于获取图像的文件扩展名,另一个用于将Base64编码与data:方案前缀分开

这是一个例子:

var ba64 = require("ba64"),
    data_url = "data:image/jpeg;base64,[Base64 encoded image goes here]";

// Save the image synchronously.
ba64.writeImageSync("myimage", data_url); // Saves myimage.jpeg.

// Or save the image asynchronously.
ba64.writeImage("myimage", data_url, function(err){
    if (err) throw err;

    console.log("Image saved successfully");

    // do stuff
});

安装它:npm i ba64 -S回购在GitHub上:https : //github.com/HarryStevens/ba64

PS后来我想到ba64可能是模块的坏名字,因为人们可能会认为ba64可以进行Base64编码和解码,而实际上并没有(很多模块已经这样做了)。那好吧。