【问题标题】:Unable to convert png image to base64encoded string无法将 png 图像转换为 base64 编码的字符串
【发布时间】:2022-01-21 19:36:02
【问题描述】:

下面这段代码应该将原始图像转换为base64字符串。

let base1="";
let base2="";
let base3="";
let base64String="";
var img=new Image();
var img1=new Image();
var img2=new Image();

img.src='Screenshot (1).png';
img1.src='Screenshot (2).png';
img2.src='Screenshot (3).png';

var reader = new FileReader();
reader.onload = function () {
    base64String = reader.result.replace("data:", "")
        .replace(/^.+,/, "");
}

reader.readAsDataURL(img);
base1=base64String;
reader.readAsDataURL(img1);
base2=base64String;
reader.readAsDataURL(img2);
base3=base64String;

但是当我执行代码时,我得到以下错误:

未捕获的类型错误:无法在“FileReader”上执行“readAsDataURL”: 参数 1 不是“Blob”类型。

这是为什么呢?请帮我解决这个问题。

【问题讨论】:

    标签: javascript base64


    【解决方案1】:

    因为 readAsDataURL 期望参数为 Blob。最好的方法是使用 canvas 转换为 base64 数据 url

    let base1="";
    let base2="";
    let base3="";
    let base64String="";
    var img=new Image();
    var img1=new Image();
    var img2=new Image();
    img.onload = function() {
        var canvas = document.createElement("canvas");
        canvas.width = img.width;
        canvas.height = img.height;
        ctx = canvas.getContext('2d');
        ctx.drawImage(img, 0, 0);
        base1 = canvas.toDataURL();
    }
    img.src='Screenshot (1).png';
    img1.onload = function() {
        var canvas = document.createElement("canvas");
        canvas.width = img1.width;
        canvas.height = img1.height;
        ctx = canvas.getContext('2d');
        ctx.drawImage(img1, 0, 0);
        base2 = canvas.toDataURL();
    }
    img1.src='Screenshot (2).png';
    img2.onload = function() {
        var canvas = document.createElement("canvas");
        canvas.width = img2.width;
        canvas.height = img2.height;
        ctx = canvas.getContext('2d');
        ctx.drawImage(img2, 0, 0);
        base2 = canvas.toDataURL();
    }
    img2.src='Screenshot (3).png';
    

    如果img src是jpg的话,不带参数的canvas.toDataURL()会生成一个png类型的数据url

    【讨论】:

    • 当我执行你的代码时,它显示Incomplete or corrupt PNG file
    • @ITCMLG 我忘记将画布宽度和高度设置为与图像宽度和高度相同并测试了代码。用编辑更新了答案。我什至用 macOS 的实际截图进行了测试,这应该是你的情况。可能PNG已损坏?另请注意:canvas.toDataURL 不应通过 file:// 协议运行
    猜你喜欢
    • 2011-10-21
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 2018-09-07
    • 2014-07-21
    • 2017-04-30
    相关资源
    最近更新 更多