1

我正在使用 Phonegap 的相机功能在我的应用程序中保存图片。当我尝试通过其保存的 file_URI(我从相机获得的)获取文件时,图像不会加载。

    函数 toBase64(url) {
        var canvas = document.createElement("canvas");
            var ctx = canvas.getContext('2d');
            var img = new Image();
            img.src = 网址;
            如果(img.height!= 0){
                变量高度 = img.height,宽度 = img.width;
                canvas.height = 高度;
                画布.宽度 = 宽度;
                ctx.drawImage(img, 0, 0, 宽度, 高度);    
                尝试 {
                    var dataURL = canvas.toDataURL("image/jpg");
                    return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");    
                }
                捕捉(错误){ console.log(“错误”+错误);}  
            }
            别的 {
                alert("路径错误!");
            }
        }

图像保存在应用程序的缓存文件夹中(/data/data/my.app/cache)

关于问题可能来自哪里的任何想法?

4

1 回答 1

2

我解决了这个问题,不得不使用 Phonegap 的 FileReader 对象。

     变量 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 reader = new FileReader();
                    reader.onloadend = 函数(evt){
                        控制台.log(evt.target.result);
                        // 触发回调
                        base64 = evt.target.result;
                    };
                    reader.readAsDataURL(文件);  
                }, 失败);
            }, 失败);
        }, 失败);
        // 我们等待阅读器完全加载,然后我们返回 base64 加密数据!
        而(base64 ==“”){}
        base64 = base64.replace(/^data:image\/(png|jpg|jpeg);base64,/, "");
        返回base64;
     }

不要认为 "while(base64 == "" ) {}" 是一个好习惯......

编辑:我使用了这位先生的 do_when 方法而不是空循环!

于 2013-04-02T19:01:56.437 回答