新人,对于这个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赞
蟹蟹大佬~~