3.8+版本的网络请求,服务器给的是Blob。怎么转为图片。WEB端可以正常转。但是微信小游戏不支持。该怎么适配?
引入一个支持blob的库,比如:
import { Base64 } from "js-base64";
let base64Data = Base64.atob(this.data);
没用库,手转解决了 
private async arrayBufferToSpriteFrame(buffer: ArrayBuffer): Promise {
return new Promise((resolve, reject) => {
const base64 = this.arrayBufferToBase64(buffer);
const img = new Image();
img.onload = () => {
const imageAsset = new ImageAsset();
imageAsset.reset(img);
const texture = new Texture2D();
texture.image = imageAsset;
const spriteFrame = new SpriteFrame();
spriteFrame.texture = texture;
resolve(spriteFrame);
};
img.onerror = (err) => reject(err);
img.src = base64;
});
}
/**
* 将 ArrayBuffer 转为 base64 字符串
*/
private arrayBufferToBase64(buffer: ArrayBuffer): string {
const bytes = new Uint8Array(buffer);
let binary = '';
for (let i = 0; i < bytes.length; i++) {
binary += String.fromCharCode(bytes[i]);
}
const base64 = this.btoaCompatible(binary); // 编码为base64
return 'data:image/png;base64,' + base64; // 拼接成图片数据URI
}
private btoaCompatible(input: string): string {
const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
let str = input;
let output = '';
for (let block = 0, charCode: number, i = 0, map = chars;
str.charAt(i | 0) || (map = '=', i % 1);
output += map.charAt(63 & (block >> (8 - (i % 1) * 8)))
) {
charCode = str.charCodeAt(i += 3 / 4);
if (charCode > 0xff) {
throw new Error("'btoa' failed: 转码失败");
}
block = (block << 8) | charCode;
}
return output;
}