如何从 Node.js 缓冲区显示 JPG 图像(UInt8Array)

Posted

技术标签:

【中文标题】如何从 Node.js 缓冲区显示 JPG 图像(UInt8Array)【英文标题】:How to display a JPG image from a Node.js buffer (UInt8Array) 【发布时间】:2016-11-24 23:37:11 【问题描述】:

我有一个自定义 Node.JS 插件,它可以将 jpg 捕获传输到我的应用程序,它运行良好 - 如果我将缓冲区内容写入磁盘,它是一个正确的 jpg 图像,正如预期的那样。

var wstream = fs.createWriteStream(filename);
wstream.write(getImageResult.imagebuffer);
wstream.end();

我正在努力将该图像显示为 img.src 而不是将其保存到磁盘,例如

var image = document.createElement('img');
var b64encoded = btoa(String.fromCharCode.apply(null, getImageResult.imagebuffer));
image.src = 'data:image/jpeg;base64,' + b64encoded;

转换后 b64 编码的数据是正确的,正如我在 http://codebeautify.org/base64-to-image-converter 上尝试的那样,并且确实显示了正确的图像。我一定错过了一些愚蠢的东西。任何帮助都会很棒!

感谢您的帮助!

【问题讨论】:

【参考方案1】:

您需要将img 添加到DOM。

另外,如果您在主进程中生成缓冲区,则需要将其传递给电子的渲染进程。

【讨论】:

【参考方案2】:

facepalm...文本中有一个额外的前导空格...

 var getImageResult = addon.getlatestimage();
 var b64encoded = btoa(String.fromCharCode.apply(null, getImageResult.imagebuffer));
 var datajpg = "data:image/jpg;base64," + b64encoded;
 document.getElementById("myimage").src = datajpg;

完美运行。

【讨论】:

【参考方案3】:

这是你想要的吗?

// Buffer for the jpg data
var buf = getImageResult.imagebuffer;
// Create an html img tag
var imageElem = document.createElement('img');
// Just use the toString() method from your buffer instance
// to get date as base64 type
imageElem.src = 'data:image/jpeg;base64,' + buf.toString('base64');

【讨论】:

如果您查看已经发布的内容,提问者会回答他自己的问题。您的答案有何不同,您尚未概述它如何回答问题或与其他答案有何不同。

以上是关于如何从 Node.js 缓冲区显示 JPG 图像(UInt8Array)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Node JS 或命令行将图像从服务器复制到本地

如何将二进制缓冲区解码为 node.js 中的图像?

读取QR码 - base64图像高度和宽度

Node.js 中的 Emoji 到 PNG 或 JPG - 如何?

在 node.js/express 中使用 EJS 显示图像

使用来自 node.js 的 AWS SES 在邮件中上传 .jpg 图像附件