我有UInt8array,宽度,高度的巴新图像。我试着这样保存它
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?
发布于 2019-11-21 22:15:58
正如@Lux提到的,使用UTF8字符串来传输二进制数据是不安全的,所以我使用了转换为base64
这是可行的
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');
不需要宽度和高度,因为它是在缓冲区中编码的。
https://stackoverflow.com/questions/58976021
复制相似问题