图像文件除了内容,一般还有额外的信息,包括创建的时间,大小,以及更多的信息,这些信息称为元数据。 图像元数据是嵌入在图像文件中的结构化信息,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 OffsetExif 信息位置 定义Exif在信息在文件中的写入,有些软件不显示Exposure Time曝光时间 即快门速度F Number光圈系数ISO speed ratings感光度Exif VersionExif版本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色相配置XResolutionX方向分辨率YResolutionY方向分辨率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'