Blob对象是否可以直接生成精灵或者纹理

新人,对于这个Blob有点不懂…网上找的代码。返回的Blob是否有办法直接使用来创建精灵或者生成纹理吗,如果不能的话要怎么保存在本地生成图片呢…
let conversions = base64ToBlob(fileObj); // 调用base64转图片方法 // conversions就是转化之后的图片文件,
function base64ToBlob(urlData) {
let arr = urlData.split(’,’);
let mime = arr[0].match(/:(.*?);/)[1] || “image/png”;
cc.log(“arr”,arr)
cc.log(“mime”,mime)
let bytes = $ext.dcodeIO.ByteBuffer.btoa(arr[1]);
let ab = new ArrayBuffer(bytes.length);
let ia = new Uint8Array(ab);
for (let i = 0; i < bytes.length; i++) {
ia[i] = bytes.charCodeAt(i);
}
return new Blob([ab], {type: mime});
}

如果是Cocos Creator的话,可以先Blob转DataURL,然后再利用DataURL来创建纹理
方法如下:

blobtoDataURL(blob, callback) {
    var fr = new FileReader();
    fr.onload = function(e) {
        callback && callback(e.target.result);
    };
    fr.readAsDataURL(blob);
}

使用

this.blobtoDataURL( blob, ( dataURL ) => {
    let image = new Image();
    let texture2D = new cc.Texture2D();
    image.src = dataURL;
    texture2D.initWithElement(image);
});
2赞

如果是Cocosdx-js的话,可以先Blob转ArrayBuffer。然后再利用ArrayBuffe和cc.FileUtils保存文件到本地。

blobtoArrayBuffer(blob, callback) {
    var fr = new FileReader();
    fr.onload = function(e) {
        callback && callback(e.target.result);
    };
    fr.readAsArrayBuffer(blob);
}

使用

this.blobtoArrayBuffer( blob, ( arrayBuffer) => {
    let fullPath = jsb.fileUtils.getWritablePath() + 你想保存的文件名;
    let success = jsb.fileUtils.writeDataToFile(new Uint8Array(arrayBuffer), fullPath);
    console.log("save result:", success);
    // 然后利用文件路径来创建精灵和纹理
});
1赞

如果你是运行在浏览器中,需要下载文件的话可以像下面这样

 /**
 * 下载文件 In Browser
 */
public static saveFileInBrowser(blob, fileName) {
    if (typeof window.navigator.msSaveBlob !== 'undefined') {
        window.navigator.msSaveBlob(blob, fileName);
    } else {
        let URL = window.URL || window[`webkitURL`]
        let objectUrl = URL.createObjectURL(blob);
        if (fileName) {
            var a = document.createElement('a');
            if (typeof a.download === 'undefined') {
                window.location = objectUrl;
            } else {
                a.href = objectUrl;
                a.download = fileName;
                document.body.appendChild(a);
                a.click();
                a.remove();
            }
        } else {
            window.location = objectUrl;
        }
        URL.revokeObjectURL(objectUrl);
    }
}
2赞

:3::3::3::3::3::3:蟹蟹大佬~~