使用JavaScript提取EXIF数据(特别是dateTime和GPSLatitude和GPSLongitude)

时间:2017-04-15 01:32:04

标签: javascript html metadata exif exif-js

我有一个程序,其中设置相机以不断拍照(大约每10秒钟左右),图片被发送到我服务器上的文件夹,然后另一个程序不断刷新该文件夹,以便我总是只有该特定文件夹中的最新图片。

存在一个不断刷新的HTML文档,并引用该图片位置以获取并显示最新图像。

我要做的是提取EXIF数据(当我从活动网页保存图像并查看其属性时,我已验证存在)。我想显示 DateCreated (我相信这是 DateTime )和纬度和经度(我相信是 GPSLatitude GPSLongitude )。

我遇到了这个库,exif-js,这似乎是大多数人在JavaScript中尝试做同样事情的首选。我的代码与 README.md 文件底部的代码相同,只是我更改了 img id =“....” < / strong>和变量名称,(见下文)。它似乎应该工作,但它不会产生任何数据。我的空 span元素只是空着。

刷新前页面的时间跨度是否存在问题?

感谢您的帮助!

这是我的代码目前的样子(只是试图获取DateTime信息)。我也尝试了GPSLatitude和GPSLongitude标签。

<!-- Library to extract EXIF data -->

<script src="vendors/exif-js/exif-js"></script>
<script type="text/javascript">
window.onload=getExif;
function getExif()
{
    var img1 = document.getElementById("img1");
    EXIF.getData(img1, function() {
        var time = EXIF.getTag(this, "DateTime");
        var img1Time = document.getElementById("img1Time");
        img1Time.innerHTML = `${time}`;
    });

    var img2 = document.getElementById("img2");
    EXIF.getData(img2, function() {
        var allMetaData = EXIF.getALLTags(this);
        var allMetaDataSpan = document.getElementById("Img2Time");
        allMetaDataSpan.innerHTML = JSON.stringify(allMetaData, null, "\t");        
    });
	
}

</script>

2 个答案:

答案 0 :(得分:0)

进入你的exif.js文件,然后转到第930行,然后将其更改为

EXIF.getData = function(img, callback) {
if ((self.Image && img instanceof self.Image
|| self.HTMLImageElement && img instanceof self.HTMLImageElement)
&& !img.complete)
return false;

答案 1 :(得分:0)

我知道这可能已经解决了,但我想为人们在这个问题上绊脚石提供另一种解决方案。

我是您可能想尝试的新库exifr的开发人员。它是维护,积极开发的,注重性能的库,可在nodejs和浏览器中使用。

    async function getExif() {
        let output = await exifr.parse(imgBuffer)
        console.log('latitude', output.latitude) // converted by the library
        console.log('longitude', output.longitude) // converted by the library
        console.log('GPSLatitude', output.GPSLatitude) // raw value
        console.log('GPSLongitude', output.GPSLongitude) // raw value
        console.log('GPSDateStamp', output.GPSDateStamp)
        console.log('DateTimeOriginal', output.DateTimeOriginal)
        console.log('DateTimeDigitized', output.DateTimeDigitized)
        console.log('ModifyDate', output.ModifyDate)
    }

您还可以尝试使用库中的playground并尝试图像及其输出,或者检查repository and docs