1

Phonegap のカメラ機能を使用して、アプリケーションに写真を保存しています。保存された file_URI (カメラから取得したファイル) からファイルを取得しようとすると、画像が読み込まれません。

    関数 toBase64(url) {
        var canvas = document.createElement("canvas");
            var ctx = canvas.getContext('2d');
            var img = 新しい画像();
            img.src = url;
            if ( img.height != 0 ) {
                var 高さ = img.height、幅 = img.width;
                canvas.height = 高さ;
                canvas.width = 幅;
                ctx.drawImage(画像、0、0、幅、高さ);    
                試す {
                    var dataURL = canvas.toDataURL("画像/jpg");
                    return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");    
                }
                キャッチ (エラー) { console.log("エラー " + エラー);}  
            }
            そうしないと {
                alert("パスが間違っています!");
            }
        }

画像はアプリケーションのキャッシュ フォルダー (/data/data/my.app/cache) に保存されます。

問題がどこから来たのかについてのアイデアはありますか?

4

1 に答える 1

2

この問題を修正し、Phonegap の FileReader オブジェクトを使用する必要がありました。

     var base64;
     関数 toBase64(ファイル名) {
        window.requestFileSystem(LocalFileSystem.TEMPORARY, 0, function(fileSystem) {
        // ファイルシステムのルートは、アプリケーションのキャッシュ フォルダーです: /storage/emulated/0/Android/data/com.yourcompany.whatever
            fileSystem.root.getFile(filename, null, function(fileEntry) {
                fileEntry.file(関数(ファイル) {
                    var リーダー = 新しい FileReader();
                    reader.onloadend = 関数(evt) {
                        console.log(evt.target.result);
                        // コールバックの起動
                        base64 = evt.target.result;
                    };
                    reader.readAsDataURL(ファイル);  
                }、 不合格);
            }、 不合格);
        }、 不合格);
        // リーダーが完全にロードされるまで待ってから、base64 で暗号化されたデータを返します!
        while ( base64 == "" ) {}
        base64 = base64.replace(/^data:image\/(png|jpg|jpeg);base64,/, "");
        base64 を返します。
     }

ただし、「while(base64 == "" ) {}」が良い習慣だとは思わないでください...

編集:空のループの代わりに、この紳士の do_when メソッドを使用しました!

于 2013-04-02T19:01:56.437 に答える