Javascript 使用base64对图像进行编码/解码

Javascript 使用base64对图像进行编码/解码,javascript,fileapi,Javascript,Fileapi,我正在尝试对图像进行编码和解码。我正在使用FileReader的readAsDataURL方法将图像转换为base64。然后,为了将其转换回来,我尝试使用readAsBinaryString()和atob(),但运气不佳。有没有其他方法可以在不使用base64编码的情况下保存图像 readAsBinaryString() 开始读取指定Blob的内容,该Blob可能是 文件读取操作完成后,readyState将变为 完成,并且将调用onloadend回调(如果有)。在那 同时,result属性包含

我正在尝试对图像进行编码和解码。我正在使用FileReader的readAsDataURL方法将图像转换为base64。然后,为了将其转换回来,我尝试使用
readAsBinaryString()
atob()
,但运气不佳。有没有其他方法可以在不使用base64编码的情况下保存图像

readAsBinaryString()

开始读取指定Blob的内容,该Blob可能是 文件读取操作完成后,readyState将变为 完成,并且将调用onloadend回调(如果有)。在那 同时,result属性包含文件中的原始二进制数据

知道我做错了什么吗

示例代码

谢谢

需要a(可以是a)作为其参数。不是一串。这就是
URL.createObjectURL(文件)
工作的原因


相反,您正在创建一个将
文件
读取为数据url的
读取器
,然后使用该数据url创建另一个
Blob
(具有相同的内容)。然后您甚至可以创建一个
reader2
,从刚刚构建的
blob
中获取一个二进制字符串。但是,
base64Image
url字符串部分(即使
btoa
-解码为更大的字符串)和
decoded.binary
字符串都不是
url.createObjectURL
的有效参数

经过进一步的研究,我从 我基本上需要将原始二进制文件包装在arraybuffer中,并将二进制字符转换为Unicode

这是丢失的代码

    var binaryImg = atob(base64Image);
    var length = binaryImg.length;
    var ab = new ArrayBuffer(length);
    var ua = new Uint8Array(ab);
    for (var i = 0; i < length; i++) {
        ua[i] = binaryImg.charCodeAt(i);
    }
var binaryImg=atob(base64Image);
变量长度=二进制长度;
var ab=新阵列缓冲(长度);
var ua=新的UINT8阵列(ab);
对于(变量i=0;i

完整的示例代码是

,此示例在哪个浏览器中工作?TypeError:encodedFile.srcElement未定义我正在使用Chrome进行测试,但我需要它在最新的Android和iOS浏览器中工作。是否可以将
base64Image
转换回原始文件?我基本上是在尝试撤销
reader.readAsDataURL(文件)使用
readAsBinaryString()
atob()
var blob=new blob([base64Image],{type:“image/jpeg”})执行应该这样做吗?尝试
URL.createObjectURL(blob)它显示了
URL.createObjectURL(blob)的断开图像我在这里更新了JSFIDLE,下面是一个显示损坏图像的屏幕。
    var binaryImg = atob(base64Image);
    var length = binaryImg.length;
    var ab = new ArrayBuffer(length);
    var ua = new Uint8Array(ab);
    for (var i = 0; i < length; i++) {
        ua[i] = binaryImg.charCodeAt(i);
    }