Python读取图片EXIF信息类库介绍和使用实例


Posted in Python onJuly 10, 2014

首先要介绍的是 Python Imaging Library,使用方法如下:

from PIL import Image

from PIL.ExifTags import TAGS
def get_exif_data(fname):

    """Get embedded EXIF data from image file."""

    ret = {}

    try:

        img = Image.open(fname)

        if hasattr( img, '_getexif' ):

            exifinfo = img._getexif()

            if exifinfo != None:

                for tag, value in exifinfo.items():

                    decoded = TAGS.get(tag, tag)

                    ret[decoded] = value

    except IOError:

        print 'IOERROR ' + fname

    return ret
if __name__ == '__main__':

    fileName = 'C:/Users/Leyond/Desktop/IMG_20121122_153514.jpg'

    exif = get_exif_data(fileName)

    print exif

返回的清单如下:

ExifVersion

ComponentsConfiguration

ExifImageWidth

DateTimeOriginal

DateTimeDigitized

ExifInteroperabilityOffset

FlashPixVersion

MeteringMode

LightSource

Flash

FocalLength

41986

ImageDescription

Make

Model

Orientation

YCbCrPositioning

41988

XResolution

YResolution

59932

ExposureTime

ExposureProgram

ColorSpace

41990

ISOSpeedRatings

ResolutionUnit

41987

FNumber

Software

DateTime

ExifImageHeight

ExifOffset

其中59932,是一大串十六进制的字符,不知为啥。除了PIL之外,还有许多类库可供使用:

Media Metadata for Python

EXIF.py

Python Exif Parser

A Blogger's Exif Parser

pyexiv2

接着看EXIF.PY,使用方法非常简单:exif.py IMG_20121122_153514.jpg

EXIF ColorSpace (Short): sRGB

EXIF ComponentsConfiguration (Undefined): YCbCr

EXIF DateTimeDigitized (ASCII): 2012:11:22 15:35:14

EXIF DateTimeOriginal (ASCII): 2012:11:22 15:35:14

EXIF DigitalZoomRatio (Ratio): 1

EXIF ExifImageLength (Long): 2560

EXIF ExifImageWidth (Long): 1920

EXIF ExifVersion (Undefined): 0220

EXIF ExposureBiasValue (Signed Ratio): 0

EXIF ExposureMode (Short): Auto Exposure

EXIF ExposureProgram (Short): Portrait Mode

EXIF ExposureTime (Ratio): 1/256

EXIF FNumber (Ratio): 14/5

EXIF Flash (Short): Flash did not fire

EXIF FlashPixVersion (Undefined): 0100

EXIF FocalLength (Ratio): 35

EXIF ISOSpeedRatings (Short): 56

EXIF InteroperabilityOffset (Long): 4810

EXIF LightSource (Short): other light source

EXIF MeteringMode (Short): CenterWeightedAverage

EXIF Padding (Undefined): []

EXIF SceneCaptureType (Short): Portrait

EXIF WhiteBalance (Short): Auto

Image DateTime (ASCII): 2012:11:24 09:44:50

Image ExifOffset (Long): 2396

Image ImageDescription (ASCII):

Image Make (ASCII):

Image Model (ASCII):

Image Orientation (Short): Horizontal (normal)

Image Padding (Undefined): []

Image ResolutionUnit (Short): Pixels/Inch

Image Software (ASCII): Microsoft Windows Photo Viewer 6.1.7600.16385

Image XResolution (Ratio): 72

Image YCbCrPositioning (Short): Co-sited

Image YResolution (Ratio): 72

Thumbnail Compression (Short): JPEG (old-style)

Thumbnail JPEGInterchangeFormat (Long): 4970

Thumbnail JPEGInterchangeFormatLength (Long): 3883

Thumbnail Orientation (Short): Horizontal (normal)

Thumbnail ResolutionUnit (Short): Pixels/Inch

Thumbnail XResolution (Ratio): 72

Thumbnail YCbCrPositioning (Short): Co-sited

Thumbnail YResolution (Ratio): 72

至于Python Exif Parser,好像没更新很久了,使用方法也很类似:

import exif

photo_path = "somePath\to\a\photo.jpg"

data = exif.parse(photo_path)

其他类库请自行研究。

Python 相关文章推荐
解析Python编程中的包结构
Oct 25 Python
Python与Java间Socket通信实例代码
Mar 06 Python
Windows下的Jupyter Notebook 安装与自定义启动(图文详解)
Feb 21 Python
PyQt5 QTableView设置某一列不可编辑的方法
Jun 25 Python
Python的log日志功能及设置方法
Jul 11 Python
Python彻底删除文件夹及其子文件方式
Dec 23 Python
Python tkinter常用操作代码实例
Jan 03 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 Python
Python小白垃圾回收机制入门
Jun 09 Python
Python2与Python3关于字符串编码处理的差别总结
Sep 07 Python
判断Python中的Nonetype类型
May 25 Python
python图像处理 PIL Image操作实例
Apr 09 Python
Python采集腾讯新闻实例
Jul 10 #Python
使用wxpython实现的一个简单图片浏览器实例
Jul 10 #Python
Python语言的12个基础知识点小结
Jul 10 #Python
使用Python获取Linux系统的各种信息
Jul 10 #Python
Django中实现一个高性能计数器(Counter)实例
Jul 09 #Python
python实现的登录和操作开心网脚本分享
Jul 09 #Python
python实现的一个火车票转让信息采集器
Jul 09 #Python
You might like
一个捕获函数输出的函数
2007/02/14 PHP
PHP form 表单传参明细研究
2009/07/17 PHP
php控制linux服务器常用功能 关机 重启 开新站点等
2012/09/05 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
2019/03/22 PHP
JQuery 图片延迟加载并等比缩放插件
2009/11/09 Javascript
JavaScript判断一个URL链接是否有效的实现方法
2011/10/08 Javascript
jQuery处理json数据返回数组和输出的方法
2015/03/11 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
省市区三级联动下拉框菜单javascript版
2015/08/11 Javascript
基于JavaScript实现图片点击弹出窗口而不是保存
2016/02/06 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
2016/05/10 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
老生常谈js动态添加事件--- 事件委托
2016/07/19 Javascript
js+html5实现复制文字按钮
2017/07/15 Javascript
在Vue项目中使用d3.js的实例代码
2018/05/01 Javascript
electron-vue利用webpack打包实现多页面的入口文件问题
2019/05/12 Javascript
javascript实现5秒倒计时并跳转功能
2019/06/20 Javascript
js实现左右轮播图
2020/01/09 Javascript
用webAPI实现图片放大镜效果
2020/11/23 Javascript
[02:36]DOTA2英雄基础教程 斯拉克
2013/11/29 DOTA
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
编写Python脚本使得web页面上的代码高亮显示
2015/04/24 Python
对django中render()与render_to_response()的区别详解
2018/10/16 Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
2018/12/24 Python
Python实现程序判断季节的代码示例
2019/01/28 Python
解决python写入带有中文的字符到文件错误的问题
2019/01/31 Python
Python元组知识点总结
2019/02/18 Python
Python3安装psycopy2以及遇到问题解决方法
2019/07/03 Python
Python 解决相对路径问题:"No such file or directory"
2020/06/05 Python
Python 多线程C段扫描、检测 Ping扫描脚本的实现
2020/09/03 Python
工程管理专业个人求职信范文
2013/12/07 职场文书
历史专业个人求职信分享
2013/12/20 职场文书
教师个人鉴定材料
2014/02/08 职场文书
机关门卫的岗位职责
2014/04/29 职场文书
2015年行政人事部工作总结
2015/05/13 职场文书
实验室安全管理制度
2015/08/05 职场文书