1

サンプル「リバース ジオコーディングを使用してロケーションベースのハイブリッド モバイル アプリを構築する方法」で使用されているコードと同様のコードを使用して、カメラで撮影した画像の dataUrl を取得しようとすると問題が発生します。Android 2.3.5 を搭載した Samsung Galaxy S2 でコードをテストしています。

dataUrl を取得するために使用しているコードは、かなり標準的な JavaScript です。

var toDataURL = function toDataURL(uri, callback)
{
    forge.logging.log('toDataURL...');
    forge.logging.log(uri);
    var image = document.createElement('img');
    image.src = uri;
    image.onload = function ()
    {
        forge.logging.log('toDataURL image.onload...');

        // create canvas
        var canvas = document.createElement('canvas');
        canvas.id = 'canvas';
        canvas.width = image.width;
        canvas.height = image.height;

        var context = canvas.getContext('2d');

        // draw image to canvas
        context.drawImage(image, 0, 0, image.width, image.height, 0, 0,  canvas.width,  canvas.height);

        // get data url 
        var dataUrl = canvas.toDataURL();
        callback(dataUrl);
        forge.logging.log('...toDataURL image.onload');
    };
    forge.logging.log('...toDataURL');
};

問題は、canvas.toDataURL によって返される dataUrl が常に空 ('data:,') であることです。パラメータとして渡された uri は次のように記録されます。

I/Forge (18019): [FORGE] 'content://io.trigger.forgeb6367d6ee13011e1b9ed12313d1adcbe/file___height=640&type=image&uri=content%3A%2F%2Fmedia%2Fexternal%2Fimages%2Fmedia%2F44%23Intent%3Bend&width=480&name=Image '

これは、forge.file.URL への呼び出しから次のパラメーターを使用して返されます。

D/Forge (18019): task.params を使用したネイティブ コール "file.URL": {"uri":"content://media/external/images/media/45#Intent;end","name":"Image ","タイプ":"画像","幅":480,"高さ":640}

おそらく、これは権限と関係があります。私の質問は、コードを機能させるにはどうすればよいですか? または、カメラで撮影したファイルのコンテンツを取得する別の方法はありますか? (私の目的は、写真の内容を Web サービスに送信することです。)

4

1 に答える 1

2

ここでコードを再作成するためにコードを適切に調べます-スニペットに感謝します-しかし、それまでの間、もっと簡単な解決策があるかもしれません.

画像をユーザーに表示して Web サービスにアップロードするだけでよい場合は、file.getImage、file.URL、および request.ajax を使用するだけです。ここここのコードから一緒に石畳:

forge.file.getImage({width: 300, height: 300}, function (file) {
  // Get a URL to the returned file object which can be used from the local webview.
  forge.file.URL(file, function (url) {
    document.getElementById('img').src = url;
  });
  forge.request.ajax({
    url: "http://example.com/file_upload",
    files: [file]
  });
});

それはあなたのために働くでしょうか?

于 2012-09-05T19:03:55.940 に答える