繁体   English   中英

NodeJS将图像流转换为base64会提供无效数据

[英]NodeJS converting image stream to base64 gives invalid data

我正在尝试生成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管道qrImg到文件,然后使用在线工具将其转换为Base64,则结果(有效且在浏览器中有效)与我的Node结果不匹配。

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

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

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

暂无
暂无

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

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