根据官方的DEMO的原生平台截图保存代码:
saveFile (picData) {
if (CC_JSB) {
let filePath = jsb.fileUtils.getWritablePath() + 'render_to_sprite_image.png';
let success = jsb.saveImageData(picData, this._width, this._height, filePath)
if (success) {
cc.log("save image data success, file: " + filePath);
}
else {
cc.error("save image data failed!");
}
}
},
得到的picData其实是一个 Unit8Array 数据类型,请问如何将它保存为一个有效的 png Base64编码呢?
已经尝试过下面方法,但是都不能直接显示为一张PNG图
/**
* Uint8Array 转 string
*/
static Uint8ArrayToString(unit8Array: Uint8Array): string {
let CHUNK_SZ = 0x8000;
let chars = [];
for (let i = 0; i < unit8Array.length; i += CHUNK_SZ) {
chars.push(String.fromCharCode.apply(null, unit8Array.subarray(i, i + CHUNK_SZ)));
}
return chars.join("");
}
// 用 js-base64 库去编码
let baseForNative = "data:image/png;base64," + Base64.btoa(Uint8ArrayToString(picData));
// 用浏览器原生API 去编码
let base64ForWeb = "data:image/png;base64," + btoa(Uint8ArrayToString(picData));
得出的两个编码都不能正常解码出可以显示的png图片,感觉应该不是Base64编码问题,因该是 picData 应该要做点什么处理在去编码为Base64吗?
求助~~~~