0

我目前正在使用以下功能从照片库中获取图像

function getImage() {
    // Retrieve image file location from specified source
    navigator.camera.getPicture(updatePhoto, function(message) {
                                alert('get picture failed');
                                },{
                                quality: 50,
                                destinationType: navigator.camera.DestinationType.FILE_URI,
                                sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY
                                }
                                );

}

function updatePhoto(imageURI) {

    //console.log(imageURI);

}

但现在我想要 base64 字符串而不是图像 URL !

这个怎么做 ?

4

2 回答 2

2

将以下代码从

destinationType: navigator.camera.DestinationType.FILE_URI,

destinationType: Camera.DestinationType.DATA_URL

请点击此链接phonegap

于 2013-09-25T13:51:15.567 回答
1

我们发现,在 Worklight 中甚至不存在 navigator.camera.getPicture()。但是, navigator.device.capture.captureImage() 可以工作,并且具有相同的签名。它总是返回一个文件 URI,不管目标类型是如何设置的。在 iOS 上,它实际上返回一个图像数组,如下所示: [ { "name": "photo_008.jpg", "fullPath": "/var/mobile/Applications/5585AC9F-27AF-46B1-AEA1-A2DFE​​01C218F/tmp/photo_008 .jpg", "type": "image/jpeg", "lastModifiedDate": 1400008865000, "size": 1000708, "start": 0, "end": 0 } ]

要自己将此 URI 转换为 base 64,您可以遵循以下过程: 1 - 创建一个临时的隐藏画布 2 - 将图像渲染到画布上 3 - 从画布导出 base64 编码的图像数据

可以执行此操作的实用程序可能如下所示:

function encodeImageUri(imageUri)
{
    // My apologies as I can't recall where I found this snippet. But it works well!
    var c=document.createElement('canvas');
    var ctx=c.getContext("2d");
    var img=new Image();
    img.onload = function(){
        c.width=this.width;
        c.height=this.height;
        ctx.drawImage(img, 0,0);
    };
    img.src=imageUri;
    var dataURL = c.toDataURL("image/jpeg");

    console.log("Encoded the data at " + imageUri + " to base64: " + dataURL);
    return dataURL;
}
于 2014-05-14T14:45:40.813 回答