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

时间:2014-07-11 14:26:44

标签: javascript node.js qr-code

我正在尝试生成QR码,然后将其作为Base64编码的数据URL返回。我知道有一个模块(https://github.com/cmanzana/qrcode-npm)应该可以直接执行此操作,但我在安装canvas模块依赖项时遇到问题。我仍然在这方面工作但是现在,我尝试的解决方法是使用备用模块生成图像流,然后将其转换为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,则结果(在浏览器中有效且有效)与我的节点结果不匹配。

1 个答案:

答案 0 :(得分:0)

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

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

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