NodeJS将图像流转换为base64会产生无效数据

NodeJS converting image stream to base64 gives invalid data

本文关键字:无效 数据 base64 图像 转换 NodeJS      更新时间:2023-09-26

我试图生成QR码,然后将其作为base64编码的数据URL返回。我知道有一个模块(https://github.com/cmanzana/qrcode-npm),它应该能够直接做到这一点,但我有麻烦安装画布模块依赖。我仍然在这方面工作,但现在,我尝试的解决方法是用备用模块生成图像流,然后将其转换为Base64。这是我目前所看到的:

var qrBase64 = '';
var qrImg = qr.image(qrText, { type: 'png', ec_level: 'L' });
qrImg.on('readable', function () {
    qrBase64 += qrImg.read().toString('base64');
});
qrImg.on('end', function () {
    qrBase64 = "data:image/png;base64," + qrBase64;
    return res.json({
        success: true,
        qrBase64: qrBase64
    });
});

它似乎工作,因为它给了我一个类似于base64编码字符串的字符串。但是,如果我尝试在浏览器中查看它,就会得到一个无效的URL错误。如果我将qrImg管道到一个文件,然后使用在线工具将其转换为Base64,那么结果(在浏览器中是有效的)与我的Node结果不匹配。

您需要一次对所有图像数据进行base64编码。在base64编码之前和之后连接块通常不会产生相同的结果。看一下这个例子:

btoa("12" + "34")         -> "MTIzNA=="
btoa("12") + btoa("34")   -> "MTI=MzQ="