精华内容
下载资源
问答
  • exif.js读取图像Exif数据

    千次阅读 2018-09-09 15:49:39
    Exif.js用于从图像文件中读取Exif数据的 JavaScript库。 您可以在浏览器中的图像上使用它,可以是图像或文件输入元素。检索Exif和Iptc元数据。该软件包也可用于AMD或CommonJS环境。 注意:Exif标准仅适用于.jpg...

    本文仅做翻译记录查看,GitHub地址:https://github.com/exif-js/exif-js

    Exif.js用于从图像文件中读取Exif元数据的 JavaScript库。

    您可以在浏览器中的图像上使用它,可以是图像或文件输入元素。检索Exif和Iptc元数据。该软件包也可用于AMD或CommonJS环境。

    注意:Exif标准仅适用于.jpg和.tiff图像。此软件包中的Exif逻辑基于Exif标准v2.2(JEITA CP-3451, included in this repo)。

    安装

    exif-js通过NPM安装:

    npm install exif-js --save

    或者在在HTML中使用script添加一个引用本地文件。

    <script src="exif.js"></script>

    注意:这里没有提供.min.js。如果你想要的话,请自己压缩。

    如果您更喜欢其他包管理器,您可能会管理:D。或者您可以GIT克隆此存储库或下载它的ZIP文件并解压缩exif.js到您的项目。

    用法

    该包添加了一个全局EXIF变量(或AMD或CommonJS等价物)。

    从调用EXIF.getData函数开始。您将图像作为参数传递给它:

    • 来自a的图像 <img src="image.jpg">
    • 或者用户在<input type="file">页面上的元素中选择的图像。

    作为第二个参数,您可以指定回调函数。在回调函数中,您应该使用this访问上述图像的元数据,然后可以根据需要使用它。该图像现在有一个额外的exifdata属性,它是带有Exif元数据的Javascript对象。您可以访问它的属性以获取图像标题,拍摄照片的日期或方向等数据。

    你可以得到所有的tages EXIF.getAllTags()。或者获取单个标记EXIF.getTag(),其中您将标记指定为第二个参数。要使用的标记名称列EXIF.Tags在exif.js。

    重要说明:请注意,在调用getData或任何其他功能之前,您必须等待图像完全加载。否则它会默默地失败。您可以通过在window.onLoad函数上运行exif-extraction逻辑来实现此等待。或者在图像自身的onLoad功能上。对于jQuery用户,请注意,您不能(可靠地)使用jQuery的ready事件。因为它在加载图像之前触发。您可以使用$(window).load()而不是$(document.ready()(请注意`exif-js不依赖于jQuery或任何其他外部库)。

    window.onload=getExif;
    
    function getExif() {
        var img1 = document.getElementById("img1");
        EXIF.getData(img1, function() {
            var make = EXIF.getTag(this, "Make");
            var model = EXIF.getTag(this, "Model");
            var makeAndModel = document.getElementById("makeAndModel");
            makeAndModel.innerHTML = `${make} ${model}`;
        });
    
        var img2 = document.getElementById("img2");
        EXIF.getData(img2, function() {
            var allMetaData = EXIF.getAllTags(this);
            var allMetaDataSpan = document.getElementById("allMetaDataSpan");
            allMetaDataSpan.innerHTML = JSON.stringify(allMetaData, null, "\t");
        });
    }
    <img src="image1.jpg" id="img1" />
    <pre>Make and model: <span id="makeAndModel"></span></div>
    <br/>
    <img src="image2.jpg" id="img2" />
    <pre id="allMetaDataSpan"></pre>
    <br/>

    注意还有备用标签,例如EXIF.TiffTags。有关完整定义和使用,请参阅源代码。您还可以使用相应打印的图像中的所有EXIF信息返回一个字符串EXIF.pretty。

    展开全文
  • 图像EXIF数据编辑

    2020-07-15 17:04:06
    Image Exif Editor是查看和编辑图像EXIF数据的最佳和最简单的方法。它旨在通过强大的EXIF数据编辑功能,以清晰易懂的格式呈现有关如何拍摄照片的详细信息。它是处理您喜欢的图像中的EXIF信息的最强大的工具。 ...

    Image Exif Editor是查看和编辑图像EXIF元数据的最佳和最简单的方法。它旨在通过强大的EXIF元数据编辑功能,以清晰易懂的格式呈现有关如何拍摄照片的详细信息。它是处理您喜欢的图像中的EXIF信息的最强大的工具。
    在这里插入图片描述
    GPS地理定位编辑是常用的,因此使用Image Exif Editor的增强型GPS地理定位,您可以搜索地点并拖动别针以更改为目的地。您还可以输入纬度和经度值来重新定位图像。使用此功能时,您可以找到其他惊人的功能。

    展开全文
  • Exif样本 用于测试Exif数据检索的样本图像。 添加图像 请做! 用户提供的图像将根据Attribution-ShareAlike 4.0 International许可发布。
  • python解析Exif数据

    千次阅读 2018-10-15 15:21:59
    数据 从文件中提取元数据。文件不是清晰可见 的对象,元数据可以存在于文档,电子表格,图像,音频和视频等文件类型中。 创作应用程序可能会存储一些细节如文件的作者,创建和修改时间,潜在的修订和注释。例如,...

    元数据

    从文件中提取元数据。文件不是清晰可见 的对象,元数据可以存在于文档,电子表格,图像,音频和视频等文件类型中。 创作应用程序可能会存储一些细节如文件的作者,创建和修改时间,潜在的修订和注释。例如,拍照手机可以标记本地的GPS在照片中或者微软的 Word 应用程序可以存储文档的作者。检查每一个文件是个艰难的任务,我们可以使用Python自动处理。

    使用PyPDF解析PDF元数据

    PyPDF 是一个优秀的第三方管理 PDF 文件很实用的库,它提供了文档的信息提取,分割,合并,加密 和解密的能力。

    为了提取元数据,我们使用函数 getDocumentInfo()。这个方法返回一个元组数组,每一个元组包含一个元数据元素和它的值。遍历这个数组并打印 PDF 文件的全部元数据。

    # coding = utf-8
    import pyPdf
    from pyPdf import PdfFileReader
    import optparse
    
    
    def printMeta(fileName):
        pdfFile = PdfFileReader(file(fileName, 'rb'))
        docInfo = pdfFile.getDocumentInfo()
        print('[*]PDF MetaData FOr:' + str(fileName))
        for metaItem in docInfo:
            print('[+]' + metaItem + ':' + docInfo[metaItem])
    
    
    def main():
        parser = optparse.OptionParser('usage %prog -F <PDF file name>')
        parser.add_option('-F', dest='fileName', type='string', help='specify PDF file name')
        (options, args) = parser.parse_args()
        fileName = options.fileName
        if fileName == None:
            print(parser.usage)
            exit(0)
        else:
            printMeta(fileName)
    
    
    if __name__ == '__main__':
        main()
    

    理解Exif元数据

    Exif 是一种图象文件格式,它的数据存储与 JPEG 格式是完全相同的。实际上 Exif 格式就是在 JPEG 格式头部插入了数码照片的信息,包括拍摄时的光圈、快 门、白平衡、ISO、焦距、日期时间等各种和拍摄条件以及相机品牌、型号、 色彩编码、拍摄时录制的声音以及全球定位系统(GPS)、缩略图等。简单地Exif=JPEG+拍摄参数。

    Phil Harvey 编写了一个实用的工具名 叫 exiftool(从 http://www.sno.phy.queensu.ca/~phil/exiftool/可获得)能解析这 些参数。

    investigator$ exiftool photo.JPG
    ExifTool Version Number : 8.76
    File Name : photo.JPG
    Directory : /home/investigator/photo.JPG
    File Size : 1626 kB
    File Modification Date/Time : 2012:02:01 08:25:37-07:00
    File Permissions : rw-r--r--
    File Type : JPEG
    MIME Type : image/jpeg
    Exif Byte Order : Big-endian (Motorola, MM)
    Make
    : Apple
    Camera Model Name : iPhone 4S
    Orientation : Rotate 90 CW
    <..SNIPPED..>
    GPS Altitude : 10 m Above Sea Level
    GPS Latitude : 89 deg 59' 59.97" N
    GPS Longitude : 36 deg 26' 58.57" W
    <..SNIPPED..>
    

    建立一个脚本来连接web网站,下载图像,并检测他们的Exif元数据。

    使用BeautifulSoup下载图像

    BeautifulSoup允许我们快速的解析HTML和 XML文档,使用BeautifulSoup来抓取HTML文档的内容来获取文档中所有的图像。使用urllib2打开文档来读取它,可以创造Beautiful对象或者包含一个不同HTML文档对象的解析树。用这样的对象, 我么可以提取所有的图像标签,通过使用 findall(‘img’)函数,这个函数返回一 个包含所有图像标签的数组。

    import urllib2
    from bs4 import BeautifulSoup
    
    
    def findImages(url):
        print('[+] Finding images on' + url)
        urlContent = urllib2.urlopen(url).read()
        soup = BeautifulSoup(urlContent)
        imgTags = soup.findAll('img')
        return imgTags
    

    从网站中下载每一个图像,然后在单独的函数中进行检查。 为了下载图像,我们将用到 urllib2,urlparse 和 os 模块。首先,我们从图像标 签中提取源地址,接着我们读取图像的二进制内容到一个变量,最后我们以写- 二进制模式打开文件将图像内容写入文件。

    import urllib2
    from urlparse import urlsplit
    from os.path import basename
    def downloadImage(imgTag):
        try:
            print('[+]Downloading image...')
            imgSrc = imgTag['src']
            imgContent = urllib2.urlopen(imgSrc).read()
            imgFileName = basename(urlsplit(imgSrc)[2])
            imgFle = open(imgFileName, 'wb')
            imgFle.write(imgContent)
            imgFle.close()
            return imgFileName
        except:
            return ''
    

    使用python的图像库从图像阅读Exif元数据

    为了测试图像的内容特到 Exif 元数据,我们将使用 Python 图像库 PIL 来处理文 件,可以从 http://www.pythonware.com/products/pil/获得,以增加 Python 的 图像处理能力,并允许我们快速的提取与地理位置相关的元数据信息。为了测 试文件元数据,我们将打开的对象作为 PIL 图像对象并使用函数 getexif()。接 下来我们解析 Exif 数据到一个数组,通过元数据类型索引。数组完成后,我们 可以搜索数组看看它是否包含有 GPSInfo 的 Exif 参数。如果它包含 GPSInfo 参 数,我们就知道对象包含 GPS 元数据并打印信息到屏幕上。

    from PIL import Image
    from PIL.ExifTags import TAGS
    
    def testForExif(imgFileName):
        try:
            exifData = {}
            imgFile = Image.open(imgFileName)
            info = imgFile._getexif()
            if info:
                for (tag, value) in info.items():
                    decoded = TAGS.get(tag, tag)
                    exifData[decoded] = value
                exifGPS = exifData['GPSInfo']
                if exifGPS:
                    print('[*]' + imgFileName + 'contains GPS MetaData')
        except:
            pass
    

    整合

    将所有的包装在一起,可以连接到一个URL地址,解析并下载所有的图像文件,然后测试每个文件的Exif元数据。

    main()函数中,首先获得站点上的所有图像的列表,然后对数据中的每一个图像,我们将下载并测试它的GPS元数据

    # coding =UTF-8
    import urllib2
    import optparse
    from bs4 import BeautifulSoup
    from urlparse import urlsplit
    from os.path import basename
    from PIL import Image
    from PIL.ExifTags import TAGS
    
    
    def findImages(url):
        print('[+] Finding images on ' + url)
        urlContent = urllib2.urlopen(url).read()
        soup = BeautifulSoup(urlContent)
        imgTags = soup.findAll('img')
        return imgTags
    
    
    def downloadImage(imgTag):
        try:
            print('[+]Downloading image...')
            imgSrc = imgTag['src']
            imgContent = urllib2.urlopen(imgSrc).read()
            imgFileName = basename(urlsplit(imgSrc)[2])
            imgFle = open(imgFileName, 'wb')
            imgFle.write(imgContent)
            imgFle.close()
            return imgFileName
        except:
            return ''
    
    
    def testForExif(imgFileName):
        try:
            exifData = {}
            imgFile = Image.open(imgFileName)
            info = imgFile._getexif()
            if info:
                for (tag, value) in info.items():
                    decoded = TAGS.get(tag, tag)
                    exifData[decoded] = value
                exifGPS = exifData['GPSInfo']
                if exifGPS:
                    print('[*]' + imgFileName + 'contains GPS MetaData')
        except:
            pass
    
    
    def main():
        parser = optparse.OptionParser('usage%prog -u <target url>')
        parser.add_option('-u', dest='url', type='string', help='specify url address')
        (options, args) = parser.parse_args()
        url = options.url
        if url == None:
            print(parser.usage)
            exit(0)
        else:
            imgTags = findImages(url)
            for imgTag in imgTags:
                imgFileName = downloadImage(imgTag)
                testForExif(imgFileName)
    
    if __name__ == '__main__':
        main()
    
    forensics: # python exifFetch.py -u
    http://www.flickr.com/photos/dvids/4999001925/sizes/o
    [+] Finding images on
    http://www.flickr.com/photos/dvids/4999001925/sizes/o
    [+] Dowloading image...
    [+] Dowloading image...
    [+] Dowloading image...
    [*] 4999001925_ab6da92710_o.jpg contains GPS MetaData
    [+] Dowloading image...
    [+] Dowloading image...
    [+] Dowloading image...
    
    展开全文
  • node-exif, 用于从图像中提取Exif数据的node.js 库 节点 exif使用节点 Exif 可以从图像( JPEG ) 中提取Exif数据Exif是一种格式,例如通过数码相机和扫描仪保存图像文件中关于图像的附加信息。 这个信息可以是...
  • Exif图片元数据抽取

    2015-05-05 14:44:41
    Exif图片元数据抽取,放在tomcat里面
  • 易于使用的Python模块从数字图像文件中提取Exif数据。 支持的格式:TIFF,JPEG,Webp,HEIC 兼容性 EXIF.py已在以下Python版本上经过测试并得到正式支持: 3.5 3.6 3.7 3.8 从3.0.0版3.0.0 ,Python2兼容性...
  • JPEG结构和Exif数据解析器。 JPEG文件结构 参考
  • 轻量级的exif图片元数据解密Exifer是一个读取JPEG / TIFF元数据的小模块。 Exif标签/字段用于将附加信息编码为数码相机拍摄的图像。 exif元信息被组织到图像中的不同图像文件目录(IFD)中。 它包含有用的信息,...
  • 我决定做一个快速项目,目标是使用EXIF GPS数据在图像中隐藏一条消息。 您可以进行测试。 它是如何工作的? 使用EXIF,我们可以将其GPS位置附加到图像上。 纬度和经度及其各自的参考值存储在DMS(度分秒)中。 ...
  • 使用Google的JSON元数据在Google相册导出中填充缺少的DateTimeOriginal EXIF数据的工具。 目录 快速开始 用法示例: yarn yarn start --inputDir ~/takeout --outputDir ~/output --errorDir ~/error 背景 我...
  • 该工具将检查exif数据是否已删除(在文件名中使用ex_字符串进行标识)已解决的问题-单线程工作程序 安装说明 下载 .zip 文件 解压 .zip 文件并将exif.exe复制到C:\Windows\ 让我们测试一下! 转到您保
  • 使用node-exif,您可以从图像(JPEG)中提取Exif数据Exif是一种格式,例如,数码相机和扫描仪将其用于在图像文件中保存有关图像的其他信息。 该信息可以是相机型号,分辨率,拍摄图像的位置(GPS)或拍摄时间...
  • goexif, 从图像文件中解码嵌入的EXIF数据 goexif提供基本exif和tiff编码数据解码。 仍在alpha中- 不保证。 欢迎使用建议和请求请求。 功能被拆分为两个包-"exif"和"tiff"包包取决于tiff包。 可以在 ...
  • 图片中的exif数据

    千次阅读 2016-05-08 14:50:22
    前两天python群中一位女神发了一张照片,虽然只是个风景照。但是我突然想起之前在读绝技>>时书中有讲到在图片中包含exif(exchange ...(事实上不止图片,文档,表格,音频,视频都有类似exif的元数据)。 from PIL

      前两天python群中一位女神发了一张照片,虽然只是个风景照。但是我突然想起之前在读 <<python绝技>> 时书中有讲到在图片中包含exif(exchange image file format),exif标准定义了如何存储图片和音频文件的标准,包含文档的作者,修改时间甚至有可能包含照片的GPS位置信息。(事实上不止图片,文档,表格,音频,视频都有类似exif的元数据)。

        from PIL import Image
        from PIL.ExifTags import TAGS
        img = Image.open(r"1.jpg")
        for tag,value in img._getexif().items():
            print(TAGS.get(tag,tag),value)
    程序运行结果如下:
    
        ('ImageWidth', 5312)
        ('ImageLength', 2988)
        ('JpegIFByteCount', 0)
        ('WhiteBalance', 0)
        ('UserComment', u'\n')
        ('MeteringMode', 65535)
        ('LightSource', 0)
        ('Flash', 0)
        ('FocalLength', (480, 100))
        ('Orientation', 0)
        ('Make', u'samsung')
        ('Model', u'SM-N9100\x00')
        ('DateTime', u'2016:05:07 15:32:37')
        ('JpegIFOffset', 258)
        ('ExifOffset', 228)

    但是经过我各种百度和谷歌之后,并没有找到PIL修改exif信息的操作,希望知道如何用PIL操作exif的各位看官在下面留个言。为此我不得不寻求与其他库,比如piexif(https://pypi.python.org/pypi/piexif)。
    根据官方文档显示,piexif只有五个函数,使用起来确实很简单。本文就不充当文档解释的工作了,直接给一个完整的自己写的class。

    import piexif
    from piexif import ImageIFD # 0th
    from piexif import ExifIFD # Exif
    from piexif import GPSIFD # GPS
    from piexif import InteropIFD #interop
    
    class Exif(dict):
        Group_0th = "0th"
        Group_1st = "1st"
        Group_Exif = "Exif"
        Group_GPS = "GPS"
        Group_Interop = "Interop"
        Group_Thumbnail = "thumbnail"
        _unkown_tag = {"name":"unkown","type":"unkown"}
        def __init__(self,path):
            dict.__init__(self)
            self.__name = path
            self.update(piexif.load(self.__name))
    
        def pretty_dict(self):
            """print exif info"""
            ret_dict = {}
            for group,group_value in self.items():
                ret_dict.setdefault(group,{})
                if group_value is not None and group_value:
                    for tag,value in group_value.items():
                        name = piexif.TAGS[group].get(tag,self._unkown_tag)["name"]
                        ret_dict[group][name] = value
            return ret_dict
    
        def as_byte(self):
            """for raw write exif to image"""
            return piexif.dump(self)
    
        def write(self,path=None):
            piexif.insert(self.as_byte(),path or self.__name)
    
        def insert_exif(self,group,tags):
            """group is one of Group_0th,Group_1st,Group_Exif,
                             Group_GPS,Group_Interop,Group_Thumbnail
                tags reference class ImageIFD,ExifIFD,GPSIFD,InteropIFD
            """
            if isinstance(tags,dict):
                for tag,value in tags.items():
                    self[group][tag] = value
            elif isinstance(tags,list) or isinstance(tags,tuple):
                for tag,value in tags:
                    self[group][tag] = value
    
        def remove_exif(self,group,tag=None):
            """group is one of Group_0th,Group_1st,Group_Exif,
                             Group_GPS,Group_Interop,Group_Thumbnail
                tags reference class ImageIFD,ExifIFD,GPSIFD,InteropIFD
            """
            if tag is None:
                self[group] = {}
            elif tag in self[group]:
                del self[group][tag]

    下图是一个添加了exif信息的图片头:
    这里写图片描述
    FF D8 是jpg文件的标识头
    FF E1 Exif头部开始标志
    00 29 根据jpeg标准,29(注意,这是十六进制)是段内容和段长度本身但不包括段标识和段类型的长度
    45 79 69 66 00 00 Exif内容的前缀(这是固定的)
    4D 4D 00 2A …… 45 49 00 FF Exif内容
    可以看出,exif信息只是填充在jpg文件中的一个FF E1打头的注释段,填充在文件头部。

    展开全文
  • 除此之外它还能够记录拍摄数据,以及图片格式化方式,这样就可以输出到兼容EXIF格式的外设上,如照片打印机等。 目前最常见的支持EXIF信息的图片格式是JPG,很多的图像工具都可以直接显示图片的EXIF信息,包括现在...
  • 它也可以获取jpeg图像的大小以及嵌入在exif数据中的jpeg缩略图的大小。 它还可以提取嵌入的缩略图图像。 正在安装 npm install exif-parser 您还可以构建浏览器包,以将其与[removed]标记一起包含在HTML文档中,...
  • 批量修复您的EXIF数据,然后再上传到Google相册。 描述 Google相册无法识别没有EXIF数据的照片,并且在元数据中没有拍摄日期时会乱七八糟。 手动使用exiftool可以解决此问题。 gphotofix是一个简单的解决方案。...
  • 0x0000 0 GPSInfo Exif.GPSInfo.GPSVersionID Byte Indicates the version of <GPSInfoIFD>. The ver...
  • 在构建期间从JPG中提取EXIF和IPTC数据。 安装 npm install --save-dev exif-loader 用法 您可以将EXIF加载器用作独立加载器: webpack.config.js module . exports = { module : { rules : [ { test : / \. ...
  • Perl脚本可根据其EXIF数据来操作图像...对原始图像文件特别是尼康相机非常有用(使用尼康相机的ShutterCount元数据进行文件重命名)先决条件:一些Perl Image :: ExifTool, File :: Basename和FileHandle模块2个...
  • 一个简单的Python脚本,用于从图像中删除人脸和EXIF数据。 用法 使用以下命令在新的虚拟环境中安装软件包 $ python3 -m venv venv $ source ./venv/bin/activate (venv) $ pip install git+...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,019
精华内容 4,007
关键字:

exif无数据