当前位置: 首页 > 知识库问答 >
问题:

将base64 png数据转换为javascript文件对象

柳飞飙
2023-03-14

我有两个用PNG编码的base64,我需要用similor比较它们。JS

我认为最好的方法是使用fileReaderPNG转换成文件对象。我该怎么做?

共有3个答案

苏嘉歆
2023-03-14

之前的答案对我不适用。

但这非常有效。将数据URI转换为文件,然后附加到FormData

司寇阳曦
2023-03-14

您可以从base64数据创建一个Blob,然后将其读取为asDataURL

var img_b64 = canvas.toDataURL('image/png');
var png = img_b64.split(',')[1];

var the_file = new Blob([window.atob(png)],  {type: 'image/png', encoding: 'utf-8'});

var fr = new FileReader();
fr.onload = function ( oFREvent ) {
    var v = oFREvent.target.result.split(',')[1]; // encoding is messed up here, so we fix it
    v = atob(v);
    var good_b64 = btoa(decodeURIComponent(escape(v)));
    document.getElementById("uploadPreview").src = "data:image/png;base64," + good_b64;
};
fr.readAsDataURL(the_file);

完整示例(包括垃圾代码和控制台日志):http://jsfiddle.net/tTYb8/

或者,你可以使用. readAsText,它工作正常,而且更优雅...

fr.onload = function ( oFREvent ) {
    document.getElementById("uploadPreview").src = "data:image/png;base64,"
    + btoa(oFREvent.target.result);
};
fr.readAsText(the_file, "utf-8"); // its important to specify encoding here

完整示例:http://jsfiddle.net/tTYb8/3/

陆绍辉
2023-03-14

方法1:仅适用于dataURL,不适用于其他类型的url。

function dataURLtoFile(dataurl, filename) {
    var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
        bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
    while(n--){
        u8arr[n] = bstr.charCodeAt(n);
    }
    return new File([u8arr], filename, {type:mime});
}

//Usage example:
var file = dataURLtoFile('data:image/png;base64,......', 'a.png');
console.log(file);

方式2:适用于任何类型的url,(超文本传输协议url,dataURL,BlobURL等)

//return a promise that resolves with a File instance
function urltoFile(url, filename, mimeType){
    mimeType = mimeType || (url.match(/^data:([^;]+);/)||'')[1];
    return (fetch(url)
        .then(function(res){return res.arrayBuffer();})
        .then(function(buf){return new File([buf], filename, {type:mimeType});})
    );
}

//Usage example:
urltoFile('data:image/png;base64,......', 'a.png')
.then(function(file){
    console.log(file);
})

两者都适用于Chrome和Firefox。

 类似资料:
  • 因此,我有一个网络摄像头功能,可以将base64 URI返回给我,但我无法将其保存到AWS,因为它需要一个图像对象。有没有办法将URI转换成javascript对象?(文件对象与文件浏览器输入标记返回的相同) 我想把这个换成 这件事 可能吗?怎样提前谢谢。。

  • 问题内容: 转换的最佳方法是什么: 至: 问题答案: ECMAScript 6引入了易于填充的内容: 该方法用于将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 数组的自身属性不会被复制,因为它无法枚举。 另外,您可以使用ES6 传播语法来达到相同的结果:

  • 问题内容: 我正在尝试将数组转换为对象,并且我快到了。 这是我的输入数组: 这是我当前的输出对象: 这是我想要的输出对象: 这是我当前的代码: 问题答案: 你不能那样做。 不是有效的JavaScript对象。 javascript中的对象是键值对。看看你的情况如何,然后是冒号,然后是数字?的是,号码是的。 如果执行此操作,则将无法访问属性。 这是Firefox控制台的结果:

  • 我在数组中有一组值,每个值都有一个和。 一旦我有了值数组和类型控制台和,输出是: 如何将这些值存储在哈希映射中,如键值(ID-LABEL)对,并将其存储在json中?

  • 我有一个包含这些键值对的对象。这个对象来自我调用的API: 简单地说,它是一个数字对象,我想要的输出是(一个简单的数组): 我试过Object。值和对象。键仍然将其转换为对象。有什么帮助吗?

  • 问题内容: 如何将表单的所有元素转换为JavaScript对象? 我希望有一些方法可以自动从表单中构建JavaScript对象,而不必遍历每个元素。我不想要由返回的字符串,也不希望由返回的映射 问题答案: 已经做到了。您只需要将数据整理成所需的格式: 注意与真实输入同名的隐藏字段,因为它们会被覆盖。