简体   繁体   English

将图像转换为base64可以在每个图像上提供相同的输出(JavaScript)

[英]Converting image to base64 gives the same output on every image (JavaScript)

I'm trying to encode image with base64 like this: 我正在尝试使用base64编码图像,如下所示:

var image = localStorage.getItem("image");
alert(image);
function readImage(url, callback) {
    var request = new
    XMLHttpRequest(); request.onload = function () {
        var file = new FileReader();
        file.onloadend = function () {
            callback(file.result);
        }
        file.readAsDataURL(request.response);
    };
    request.open('GET', url);
    request.responseType = 'blob';
    request.send();
}

readImage(image, function (base64) {
    localStorage.setItem("Base64", base64);
});
var base64_2 = localStorage.getItem("Base64");

It gives me the same base64 output on every picture link I get from localStorage (Checked it, the images from localStorage are different). 在我从localStorage获得的每个图片链接上,它给我提供了相同的base64输出(选中它,来自localStorage的图像是不同的)。

What is the problem? 问题是什么?

You are not getting base64 because of Async code inside readImage . 由于readImageAsync代码,您没有得到base64 XMLHttpRequest and FileReader both works in Async manner due to this your bottom code execute first after that It will come in callback XMLHttpRequestFileReader都以Async方式工作,这是因为您的最低代码将在此之后首先执行,它将进入callback

readImage(image, function (base64) {
    localStorage.setItem("Base64", base64);
    successHandler();  //successHandler will call when callback return base64 after processing
});

function successHandler(){
    var base64_2 = localStorage.getItem("Base64");
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM