首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >科多瓦相机以照片为布洛布对象

问科多瓦相机以照片为布洛布对象
EN

Stack Overflow用户
提问于 2016-04-28 11:06:49
回答 1查看 4.1K关注 0票数 6

我想用cordova-plugin-camera拍张照片。我希望结果是一个File或Blob对象。

然而,destinationType必须是DATA_URL或FILE_URI中的一个。

文档声明:

DATAURL可能非常内存密集型,并导致应用程序崩溃或内存不足的错误。如果可能的话使用FILEURI或NATIVE_URI

但是,据我所知,将这种文件uri转换为Blob的步骤如下:

  1. 在<img/上呈现uri
  2. 在画布上画图像
  3. 将画布读入base64
  4. 将base64转换为Blob

我很难相信这比使用DATAURL更有效。因此,我最好还是使用DATAURL,跳过步骤1-3。

有没有一种更有效的方法来获取作为Blob对象的图片?

EN

回答 1

Stack Overflow用户

发布于 2017-05-24 10:17:24

不幸的是,你不能从科多瓦相机插件中提取BLOB。

获取BLOB的方法是将base64编码的字符串转换为BLOB并使用该字符串。

下面是一种方法(ES6兼容的),它允许您转换为BLOB,并只转换为sliceSize,以提高内存效率。

代码语言:javascript
复制
/**
 * 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;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36912819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档