【问题标题】:Phonegap / Cordova camera plugin - how to get photo's date/time stamp?Phonegap / Cordova 相机插件 - 如何获取照片的日期/时间戳?
【发布时间】:2014-06-05 10:48:13
【问题描述】:

我有一个 Phonegap 应用程序,它需要让用户使用手机的相机拍照并让用户从设备上已有的照片中进行选择。

我需要将拍摄照片的日期/时间作为元数据的一部分,但我很难弄清楚如何使用 Phonegap / Cordova 来做到这一点。

最初我认为我可以使用 File API 的 FileEntry.getMetadata() 调用,但这不会为 modifyTime 属性返回有效日期。我认为 phonegap 还会转换设备上的文件,以便您从相机插件收到的不是设备上的原始文件,因此即使 getMetadata() 调用有效,日期也不会是正确的。

除了为我需要的每个平台编写自己的相机插件版本之外,还有其他方法吗?

这似乎是唯一的解决方法。

【问题讨论】:

    标签: android ios cordova camera


    【解决方案1】:

    所以,我已经设法弄清楚了。

    可以从 JPEG 文件中的 EXIF 数据标签中检索日期/时间戳以及许多其他信息。这可以使用这个有用的 JS 库来完成 - https://github.com/jseidelin/exif-js

    不幸的是,Android 的 Cordova 相机插件在转换从图库中选择的图像时不会复制 EXIF 标签,只有在使用相机拍摄图像时才会复制,所以这是一个问题,但我将通过分叉插件来解决这个问题。 iOS 版本的插件似乎做了正确的事情。

    任何感兴趣的人的代码 -

    var source = fromCamera 
           ? Camera.PictureSourceType.CAMERA 
           : Camera.PictureSourceType.PHOTOLIBRARY;
    
    var opts = {
        encodingType: Camera.EncodingType.JPEG,
        sourceType: source,
        destinationType: Camera.DestinationType.NATIVE_URI
    };
    
    navigator.camera.getPicture(
            function(imageURI) {
                window.resolveLocalFileSystemURL(imageURI,
                        function(entry) {
                            entry.file(function(file) {
                                EXIF.getData(file, function() {
                                    var datetime = EXIF.getTag(this, "DateTimeOriginal");
                                    alert(datetime);
                                });                                                
    
                                // do something useful....
    
                            }, standardErrorHandler);
                        },
                        function(e) {
                            alert('Unexpected error obtaining image file.');
                            standardErrorHandler(e);
                        });
            },
            function() {
                // nada - cancelled
            },
            opts);
    

    【讨论】:

    • 谢谢,这对我的 ios 也有帮助,因为 camera.getPicture 似乎也删除了那里的 EXIF 数据。
    • 我在 ios 模拟器上执行此操作时遇到问题。 DateTimeOriginal 标签不可用。如果将 EXIF.getTag() 更改为 EXIF.getAllTags() 然后打印出每个标签,我只会返回以下内容:ExifIFDPointer ColorSpace PixelXDimension PixelYDimension
    • 可用的标签会因 JPEG 源而异。我尝试过的物理电话设备支持 DateTimeOriginal 标签,但您应该处理预期标签不存在的情况,而是提供默认值(或引发错误等)。
    • @RichardNichols 您是否已经解决了从图库中获取照片的创建日期的问题?我正在尝试您的代码,但我得到的日期始终是当前日期,而不是照片创建日期(我用于 Android)。
    • 我也有这个问题。我发现你只能得到插件公开的 EXIF 标签。你必须去源头获取所有的元数据。
    【解决方案2】:

    和其他人一样,我不喜欢以“以完全不同的方式做这件事”开头的答案,但我遇到了与原始海报相同的问题,使用备用相机插件 cordova-plugin-camera-with-exif 是我找到的最佳解决方案。

    【讨论】:

    • 我刚用 ionic v4 + angular 试过这个,它仍然像宣传的那样工作。
    • 当我们捕获它时它不能与 android 一起工作,然后它除了图像路径之外什么都不提供。
    猜你喜欢
    • 2017-06-02
    • 2016-05-11
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多