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显示天气预报
Mar 02 Python
python把1变成01的步骤总结
Feb 27 Python
Python实现堡垒机模式下远程命令执行操作示例
May 09 Python
python实现翻转棋游戏(othello)
Jul 29 Python
Python 文件操作之读取文件(read),文件指针与写入文件(write),文件打开方式示例
Sep 29 Python
Python Collatz序列实现过程解析
Oct 12 Python
pandas中遍历dataframe的每一个元素的实现
Oct 23 Python
Python 实现日志同时输出到屏幕和文件
Feb 19 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
Feb 23 Python
python解决OpenCV在读取显示图片的时候闪退的问题
Feb 23 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 04 Python
python基础之类方法和静态方法
Oct 24 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
详解PHP中cookie和session的区别及cookie和session用法小结
2016/06/12 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
Laravel实现搜索的时候分页并携带参数
2019/10/15 PHP
JS 如何获取radio选中后的值及不选择取radio的值
2013/10/28 Javascript
js中对象的声明方式以及数组的一些用法示例
2013/12/11 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
2014/06/06 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
jQuery插件pagewalkthrough实现引导页效果
2015/07/05 Javascript
易操作的jQuery表单提示插件
2015/12/01 Javascript
jquery表单插件Autotab使用方法详解
2016/06/24 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
JS 事件绑定、事件监听、事件委托详细介绍
2016/09/28 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
小程序云开发初探(小结)
2018/10/24 Javascript
Vue.js中该如何自己维护路由跳转记录
2019/05/19 Javascript
nodejs制作小爬虫功能示例
2020/02/24 NodeJs
Vue事件处理原理及过程详解
2020/03/11 Javascript
详解Django框架中用户的登录和退出的实现
2015/07/23 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
python实现决策树分类(2)
2018/08/30 Python
python利用 keyboard 库记录键盘事件
2020/10/16 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
HTML5响应式(自适应)网页设计的实现
2017/11/17 HTML / CSS
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
波兰最大的儿童服装连锁店之一:5.10.15.
2018/02/11 全球购物
高分子材料与工程专业个人求职信
2013/12/15 职场文书
工厂会计员职责
2014/02/06 职场文书
元旦晚会感言
2014/03/12 职场文书
检讨书1000字
2014/10/11 职场文书
社区端午节活动总结
2015/02/11 职场文书
2015年安全生产月工作总结
2015/07/27 职场文书
2016年教师节感言
2015/12/09 职场文书
小组口号霸气押韵
2015/12/24 职场文书
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis