首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Node.js中将UInt8array另存为png

在Node.js中将UInt8array另存为png
EN

Stack Overflow用户
提问于 2019-11-21 21:19:05
回答 1查看 714关注 0票数 0

我有UInt8array,宽度,高度的巴新图像。我试着这样保存它

代码语言:javascript
运行
复制
const screenshot = new TextDecoder('utf-8').decode(await frame.exportAsync()) // figma.com/plugin-docs/api/properties/nodes-exportasync 
// passing screenshot as string over network
const uint8array = new TextEncoder('utf-8').encode(screenshot);
const data = Buffer.from(uint8array);
fs.writeFileSync(`${fileName}.png`, data, 'binary');

但是这段代码显然没有考虑宽度和高度。

如何在Node.js中正确地将其保存为png?

EN

回答 1

Stack Overflow用户

发布于 2019-11-21 22:15:58

正如@Lux提到的,使用UTF8字符串来传输二进制数据是不安全的,所以我使用了转换为base64

这是可行的

代码语言:javascript
运行
复制
var base64 = btoa(new Uint8Array(await frame.exportAsync()).reduce((data, byte) => data + String.fromCharCode(byte), ''),
);

// passing screenshot as string over network
function urlBase64ToUint8Array(base64String: string) {
    var padding = '='.repeat((4 - (base64String.length % 4)) % 4);
    var base64 = (base64String + padding).replace(/\-/g, '+').replace(/_/g, '/');

    var rawData = atob(base64);
    var outputArray = new Uint8Array(rawData.length);

    for (var i = 0; i < rawData.length; ++i) {
        outputArray[i] = rawData.charCodeAt(i);
    }
    return outputArray;
}

const uint8array = urlBase64ToUint8Array(screenshot);
const data = Buffer.from(uint8array);
fs.writeFileSync(`${fileName}.png`, data, 'binary');

不需要宽度和高度,因为它是在缓冲区中编码的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58976021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档