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);

}

しかし今、画像の URL ではなく base64 文字列が必要です!

これを行う方法 ?

4

2 に答える 2

1

私たちが発見したのは、navigator.camera.getPicture() が Worklight 内にさえ存在しないということです。ただし、 navigator.device.capture.captureImage() は機能し、同じ署名が見られます。宛先タイプがどのように設定されているかに関係なく、常にファイル URI を返します。iOS では、実際には次のような画像の配列が返されます。 .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 に答える