在使用egret发布小游戏时,很多平台是将canvas.toDataURL这个接口给禁掉的,也就是说我们不能通过这个接口将截图转成base64位传给服务端保存了。下面讲讲我的解决方案: 1.先使用renderTexture来创建截图:
`let renderTexture = new egret.RenderTexture();
renderTexture.drawToTexture(display, new egret.Rectangle(0, 0, imgWidth, imgHeight));`
2.通过upng的类库,将renderTexture像素点信息编译成png数据
`let bmd:egret.BitmapData = renderTexture.$bitmapData;
let width:number = bmd.width;
let height:number = bmd.height;
let srcData:any = renderTexture.getPixels(0, 0, width, height);
let pngData = UPNG.encode([srcData.buffer], width, height, 0);`
3.在通过base64js的类库,将png数据转换成base64数据
let base64String = "data:image/png;base64,"+this.fromByteArray(new Uint8Array(pngData))";
使用base64js这个类库的原因是有些小游戏平台不支持使用window.btoa()这个接口。如果支持的话,我们就没必要引入这个类库了,直接
let base64String = "data:image/png;base64,"+btoa(self.arrToStr(new Uint8Array(pngData))";