我试图使用cordova-plugin-camera
拍照。我希望结果是File
或Blob
对象。
但是,destinationType
必须是DATA_URL
或FILE_URI
中的一个。
文档声明:
DATAURL可能非常耗费内存,导致应用程序崩溃或内存不足错误。如果可能,请使用FILEURI或NATIVE_URI
但是,据我所知,将这样的文件uri转换为Blob会采取以下步骤:
<img/
Blob
我发现很难相信这比使用DATAURL
更有效率。所以我也可以使用DATAURL
来跳过步骤1-3。
有没有办法以更有效的方式将照片作为Blob
对象拍摄?
答案 0 :(得分:1)
很遗憾,您无法从Cordova相机插件中提取BLOB
。
获取BLOB
的方法是将base64编码的字符串转换为BLOB
并使用它。
这是一种方法(符合ES6标准),允许您转换为BLOB
,而 sliceSize 可以提高内存效率。
/**
* Turn base 64 image into a blob, so we can send it using multipart/form-data posts
* @param b64Data
* @param contentType
* @param sliceSize
* @return {Blob}
*/
private getBlob(b64Data:string, contentType:string, sliceSize:number= 512) {
contentType = contentType || '';
sliceSize = sliceSize || 512;
let byteCharacters = atob(b64Data);
let byteArrays = [];
for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
let slice = byteCharacters.slice(offset, offset + sliceSize);
let byteNumbers = new Array(slice.length);
for (let i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}
let byteArray = new Uint8Array(byteNumbers);
byteArrays.push(byteArray);
}
let blob = new Blob(byteArrays, {type: contentType});
return blob;
}