当前位置: 首页 > 知识库问答 >
问题:

从图像相册中选择图像时,无法读取文件大小

韩阳成
2023-03-14

在我的phonegap应用程序(android版本4.4.2)中,我需要选择图像形式sdcard。在这种情况下,我无法读取图像大小和名称。我的代码就像。

function getSkiImage(id,source){ 
    navigator.camera.getPicture(function(imageURI){ 
        alert(imageURI); 
        window.resolveLocalFileSystemURI(imageURI, function(fileEntry) { 
            alert(fileEntry); 
            fileEntry.file(function(fileObj) { 
                alert(fileObj.size); 

            }); 
        }); 


// tried this also
/*window.requestFileSystem(imageURI, 0, function(data) { 
    alert(data.size); 

}, fail); */ 


}, fail, { quality: 50, 
    destinationType: destinationType.FILE_URI, 
    sourceType: pictureSource.PHOTOLIBRARY }); 
}

在我的Android设备(v 4.4.2)专辑中显示“最近”,“驱动器”,“图像”,“图库”,...当从图库中选择图像时,只有图像大小是得到的。除了图库图像大小是无法得到..

参考了这个,但没有获得成功

Cordova/PhoneGap照片文件大小

在phonegap doc中,他们说:

仅限 Android 4.4:Android 4.4 引入了新的存储访问框架,使用户能够更轻松地跨所有首选文档存储提供商浏览和打开文档。Cordova尚未与这个新的存储访问框架完全集成。因此,当用户从“最近”、“驱动器”、“图像”或“外部存储”文件夹中进行选择时,getPicture() 方法将无法正确返回图片,当目标类型FILE_URI。但是,如果用户首先通过“图库”应用程序,则将能够正确选择任何图片。此问题的潜在解决方法记录在此 StackOverflow 问题上。请参阅 CB-5398 以跟踪此问题。

Android使用intents在设备上启动相机活动来捕捉图像,而在内存较低的手机上,Cordova活动可能会被终止。在这种情况下,当Cordova活动恢复时,图像可能不会出现。

共有1个答案

乐山
2023-03-14
<!DOCTYPE html>
<html>
  <head>
    <title>Capture Photo</title>

    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
    <script type="text/javascript" charset="utf-8">

    var pictureSource;   // picture source
    var destinationType; // sets the format of returned value 

    // Wait for PhoneGap to connect with the device
    //
    document.addEventListener("deviceready",onDeviceReady,false);

    // PhoneGap is ready to be used!
    //
    function onDeviceReady() {
        pictureSource=navigator.camera.PictureSourceType;
        destinationType=navigator.camera.DestinationType;
        getPhoto(pictureSource.PHOTOLIBRARY);
    }


    function onPhotoURISuccess(imageURI) {
      alert(imageURI);

      var largeImage = document.getElementById('largeImage');

      largeImage.style.display = 'block';


      largeImage.src = imageURI;
      window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, rfail);


      window.resolveLocalFileSystemURI(imageURI, onResolveSuccess, fail);
    }

    function rfail(e){
        alert(e);
    }
    function getPhoto(source) {
      // Retrieve image file location from specified source
      navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50, 
        destinationType: destinationType.FILE_URI,
        sourceType: source });
    }
    function onFileSystemSuccess(fileSystem) {
        console.log(fileSystem.name);
    }
    function bytesToSize(bytes) {
        var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'];
        if (bytes == 0) return 'n/a';
        var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
        return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i];
    };
    function onResolveSuccess(fileEntry) {


        filenameofajax=fileEntry.name;

        var efail = function(evt) {
            console.log("File entry error  "+error.code);
        };
        var win=function(file) {
            console.log(file);
            for (var i in file){
                alert(i+""+file[i]);
            }
            alert(bytesToSize(file.size));

        };
        fileEntry.file(win, efail);
    }
    function efail(e) {
        alert("esa")
    }
    function fail(e) {
        alert("sa")
    }

    // Called if something bad happens.
    // 
    function onFail(message) {
      alert('Failed because: ' + message);
    }

    </script>
  </head>
  <body>
    <button onclick="capturePhoto();">Capture Photo</button> <br>
    <button onclick="capturePhotoEdit();">Capture Editable Photo</button> <br>
    <button onclick="getPhoto(pictureSource.PHOTOLIBRARY);">From Photo Library</button><br>
    <button onclick="getPhoto(pictureSource.SAVEDPHOTOALBUM);">From Photo Album</button><br>
    <img style="display:none;width:60px;height:60px;" id="smallImage" src="" />
    <img style="display:none;" id="largeImage" src="" />
  </body>
</html>

检查这个

 类似资料:
  • 当我构建一个jar文件并运行它时,由于找不到图像图标,它显示一个空指针异常 这是我运行jar文件时得到的错误 但是当我在NetBeans中运行这个项目时,它运行良好 这是我列出罐子里所有文件时的输出

  • 问题内容: 是否有一个Java库可以读取很大图像(例如JPEG)文件(> 10,000 x 10,000像素)的区域,而无需将整个图像保留在内存中。 或者,哪个Java库能够以最小的开销处理非常大的图像文件。 问题答案: 标准ImageIO允许您读取(大)图像区域,而无需先将整个图像读取到内存中。

  • 我必须做一个按钮,将提供从画廊或从相机选择图像。 结果是有效的。如果我从图库中选择,图像查看器将查看它,如果我选择从相机拍照,它也有效。问题是,在我的show FileChooser()方法中,我所有的意图都在同时运行,所以当我从图库中选择时,相机仍然运行。我选择相机,图库也在打开。我认为我应该在切换案例模式下实现我的代码,但我不明白如何做到这一点。请帮助解决我的初学者问题。

  • 我正在尝试从管道(如stdin,named pipe等)加载图像。 这是我的示例代码: #包括“opencv2/opencv.hpp” 使用名称空间CV; int main(int argc,char**argv){ } 会有用的,但是 而且 不能工作,并且Mat img的行和列为0。 真正的文件和管道有什么区别?

  • 问题内容: 我可以用来从图像(JPEG,PNG)文件中提取文本的最佳开源Java库是什么? 问题答案: 有GOCR和tesseract,但我不确定它们的当前版本如何堆叠-尝试同时尝试您需要处理的一些典型输入并通过此试验进行选择吗?

  • 问题内容: 我已经编写了一个程序来加密Netbeans中的图像。从Netbeans运行时,该程序运行良好,但是当我将其构建为.jar文件时,即使我将图像文件与.jar文件放在同一文件夹中,它也无法读取图像。 //加密 //加载/写入图片 问题答案: 目前尚不清楚以下哪个触发您的错误。这个 将从当前目录读取,该目录不一定与您的jar文件所在的目录相同。 这个 将从类所在的jar文件中的目录中读取。请