我想用cordova-plugin-camera拍张照片。我希望结果是一个File或Blob对象。
然而,destinationType必须是DATA_URL或FILE_URI中的一个。
文档声明:
DATAURL可能非常内存密集型,并导致应用程序崩溃或内存不足的错误。如果可能的话使用FILEURI或NATIVE_URI
但是,据我所知,将这种文件uri转换为Blob的步骤如下:
<img/上呈现uriBlob我很难相信这比使用DATAURL更有效。因此,我最好还是使用DATAURL,跳过步骤1-3。
有没有一种更有效的方法来获取作为Blob对象的图片?
发布于 2017-05-24 10:17:24
不幸的是,你不能从科多瓦相机插件中提取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;
}https://stackoverflow.com/questions/36912819
复制相似问题