我正在尝试拍照cordova-plugin-camera.我希望结果是一个File或一个Blob对象.
但是,destinationType必须是DATA_URL或之一FILE_URI.
文档说明:
DATAURL可能非常耗费内存,导致应用程序崩溃或内存不足错误.如果可能,请使用FILEURI或NATIVE_URI
但是,据我所知,将这样的文件uri转换为Blob需要执行以下步骤:
<img/Blob我发现很难相信这比使用效率更高DATAURL.所以我也可以使用DATAURL它并跳过步骤1-3.
有没有办法以Blob更有效的方式将照片作为对象拍摄?
不幸的是,您无法BLOB从 Cordova 相机插件中提取 a。
获取 a 的方法BLOB是将 Base64 编码的字符串转换为 aBLOB并使用它。
这里有一个方法(符合 ES6),允许您转换为BLOBsliceSize以提高内存效率。
/**
* 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;
}
Run Code Online (Sandbox Code Playgroud)