mic*_*cah 4 base64 image-processing node.js data-uri
在节点服务器上,我想将上传的datauri数据另存为图像。为此,我尝试了解码此png-的内容
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAIAAAFlEcHbAAAAB3RJTUUH1gMWFjk7nUWcXQAAAAlwSFlzAABOIAAATiABFn2Z3gAAAARnQU1BAACxjwv8YQUAAAAeSURBVHjaY7h79y7DhAkTGIA04/Tp0xkYGJ49ewYAgYwLV/R7bDQAAAAASUVORK5CYII=
Run Code Online (Sandbox Code Playgroud)
并将其保存为.png
扩展。看起来还有更多。如何解码datauri并将其保存为文件?
我创建了一个与Node.js一起使用的库,该库有助于数据URI方案的编码和解码。我相信它可以帮助您,请检查:
https://github.com/DiegoZoracKy/image-data-uri
在您的情况下,使用该库,代码将是:
'use strict';
const ImageDataURI = require('image-data-uri');
const dataURI = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAACCAIAAAFlEcHbAAAAB3RJTUUH1gMWFjk7nUWcXQAAAAlwSFlzAABOIAAATiABFn2Z3gAAAARnQU1BAACxjwv8YQUAAAAeSURBVHjaY7h79y7DhAkTGIA04/Tp0xkYGJ49ewYAgYwLV/R7bDQAAAAASUVORK5CYII=';
const fileName = 'decoded-image.png';
ImageDataURI.outputFile(dataURI, filePath);
Run Code Online (Sandbox Code Playgroud)
您可以使用以下代码将数据 uri 转换为 blob:
function dataURItoBlob(dataURI) {
var byteStr;
if (dataURI.split(',')[0].indexOf('base64') >= 0)
byteStr = atob(dataURI.split(',')[1]);
else
byteStr = unescape(dataURI.split(',')[1]);
var mimeStr = dataURI.split(',')[0].split(':')[1].split(';')[0];
var arr= new Uint8Array(byteStr.length);
for (var i = 0; i < byteStr.length; i++) {
arr[i] = byteStr.charCodeAt(i);
}
return new Blob([arr], {type:mimeStr});
}
Run Code Online (Sandbox Code Playgroud)
然后您可以将此 blob 数据附加到 from data 并将其作为文件上传:
var blob = dataURItoBlob(dataURI);
var fd = new FormData(document.forms[0]);
fd.append("image", blob);
Run Code Online (Sandbox Code Playgroud)