当小游戏遇到toDataURL不可用时,如何将截图转base64

189 阅读1分钟

在使用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))";