我正在尝试生成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,则结果(在浏览器中有效且有效)与我的节点结果不匹配。
答案 0 :(得分:0)
您需要一次对所有图像数据进行base64编码。在base64编码之前和之后连接块通常不会产生相同的结果。看一下这个例子:
btoa("12" + "34") -> "MTIzNA=="
btoa("12") + btoa("34") -> "MTI=MzQ="