图像文件除了内容,一般还有额外的信息,包括创建的时间,大小,以及更多的信息,这些信息称为元数据。 图像元数据是嵌入在图像文件中的结构化信息,Exif (Exchangeable Image File Format) 是最常见的元数据标准之一。
元数据
元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data), 主要是描述数据属性(property)的信息。 用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
图片元数据
图片元数据(Metadata) 是嵌入到图片文件中的一些标签。比较像文件属性,但是种类繁多。 对于数码图像,目前常见的元数据有EXIF, IPTC和XMP三种:
- EXIF:通常被数码相机在拍摄照片时自动添加,比如相机型号、镜头、曝光、图片尺寸等信息。
- IPTF:比如图片标题、关键字、说明、作者、版权等信息。主要是由人工在后期通过软件写入的数据。
- XMP:XMP实际上是一种元数据存储和管理的标准,可以将Exif,IPTC或其他的数据都按XMP统一的格式存放在图像文件中。
元数据的嵌入方式因图像格式而异,不同格式的图像文件(如JPG, TIF, DNS等)有不同的嵌入方式。
JPG文件结构
JPG文件是由“段”(segment)组成的,每个段都是由FFxx开头,其中xx是段的标识, 说明是什么段,如FFD8标志文件的开始,称为开始段(SOI),FFD9标志文件结束, 称为结束段(EOI)。其他如DQT, DHT等都是与JPG压缩有关的数据段。
但其中FFE0-FFEF是保留为应用段(APP段),即这些段中的信息是为某些应用程序所用, 不是JPG解码所必需的。 Exif就是用FFE1(APP1)作为其段标镶嵌在JPG文件开始段SOI的后面, 因此Exif的数据也就称为 APP1段,在APP1段标下面是段的长度和以字符串“Exif”的标记。
下面是查看JPG文件信息时一些具体的参数:
Image Description
图像描述、来源,指生成图像的工具Artist
作者 有些相机可以输入使用者的名字Make
生产者 指产品生产厂家Model
型号 指设备型号Orientation
方向 有的相机支持,有的不支持Resolution Unit
分辨率单位 一般为PPISoftware
软件 显示固件Firmware版本Date Time
日期和时间YCbCrPositioning
色相定位Exif Offset
Exif 信息位置 定义Exif在信息在文件中的写入,有些软件不显示Exposure Time
曝光时间 即快门速度F Number
光圈系数ISO speed ratings
感光度Exif Version
Exif版本DateTime Original
创建时间DateTime Digitized
数字化时间Components Configuration
图像构造(多指色彩组合方案)Compressed Bits per Pixel(BPP)
压缩时每像素色彩位 指压缩程度Exposure Bias Value
曝光补偿。Max Aperture Value
最大光圈Color Space
色域、色彩空间ExifImage Width (Pixel X Dimension)
图像宽度 指横向像素数ExifImage Length (Pixel Y Dimension)
图像高度 指纵向像素数Interoperability IFD
通用性扩展项定义指针 和TIFF文件相关,具体含义不详File Source
源文件Compression
压缩比
Exif与TIFF
TIFF(Tag Image File Format)图像文件是图形图像处理中常用的格式之一, 其图像格式很复杂,但由于它对图像信息的存放灵活多变,可以支持很多色彩系统, 而且独立于操作系统,因此得到了广泛应用。在各种地理信息系统、摄影测量与遥感等应用中, 要求图像具有地理编码信息,例如图像所在的坐标系、比例尺、图像上点的坐标、经纬度、长度单位及角度单位等等。
文件结构
TIFF文件由三部分构成:文件头(TIFF Header), 文件目录IFD(Image File Directory)和目录项(Directory Entry)。 文件头的格式与长度是固定的,主要是指出第一个文件目录(IFD0)的位置。 文件目录IFD则指出该图像有多少个目录项(Directory Entry),和下一个IFD的位置。 每个目录项有12字节,如上图中IFD0有8个目录项。一般一个IFD表示一个图像, 如果TIFF文件中有多个图像,则有多个IFD(IFD0, IFD1,…)。各个IFD由指针连接。
TIFF的相关参数:
ImageWidth
图像宽度ImageHeight
图像高度BitsPerSample
比特采样率Compression
压缩方法PhotometricInterpretation
像素合成Orientation
拍摄方向SamplesPerPixel
像素数PlanarConfiguration
数据排列YCbCrSubSampling
色相抽样比率YCbCrPositioning
色相配置XResolution
X方向分辨率YResolution
Y方向分辨率ResolutionUnit
分辨率单位StripOffsets
图像资料位置RowsPerStrip
每带行数WhitePoint
白点色度PrimaryChromaticities
主要色度YCbCrCoefficients
颜色空间转换矩阵系数ReferenceBlackWhite
黑白参照值DateTime
日期和时间ImageDescription
图像描述、来源Make
生产者Model
型号Software
软件Artist
作者Copyright
版权信息
from PIL import Image, ExifTags
img = Image.open('Tulips.jpg')
img.info.keys()
dict_keys(['jfif', 'jfif_version', 'dpi', 'jfif_unit', 'jfif_density', 'exif', 'adobe', 'adobe_transform', 'xmp', 'photoshop'])
print(type(img.info['exif']))
<class 'bytes'>
exifdata = img._getexif()
type(exifdata)
dict
print(exifdata.keys())
dict_keys([18246, 18249, 34665, 306, 33432, 59932, 40093, 37521, 37522, 36867, 36868])
ExifTags.TAGS
的内容较多,查看共有多少个。
len(ExifTags.TAGS)
273
查询某一个信息。
ExifTags.TAGS.get(347)
'JPEGTables'