>>> from env_helper import info; info()
页面更新时间: 2024-04-06 23:04:44
运行环境:
    Linux发行版本: Debian GNU/Linux 12 (bookworm)
    操作系统内核: Linux-6.1.0-18-amd64-x86_64-with-glibc2.36
    Python版本: 3.11.2

3.7. 图像元数据以及Exif信息

图像文件除了内容,一般还有额外的信息,包括创建的时间,大小,以及更多的信息,这些信息称为元数据。

3.7.1. 元数据

元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息。 用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。

图片元数据

图片元数据(Metadata) 是嵌入到图片文件中的一些标签。比较像文件属性,但是种类繁多。 对于数码图像,目前常见的元数据有EXIF, IPTC和XMP三种:

  • EXIF:通常被数码相机在拍摄照片时自动添加,比如相机型号、镜头、曝光、图片尺寸等信息

  • IPTF:比如图片标题、关键字、说明、作者、版权等信息。主要是由人工在后期通过软件写入的数据。

  • XMP:XMP实际上是一种元数据存储和管理的标准,可以将Exif,IPTC或其他的数据都按XMP统一的格式存放在图像文件中。

元数据的嵌入方式因图像格式而异,不同格式的图像文件(如JPG, TIF, DNS等)有不同的嵌入方式。

如何查看元数据

在Windows上,最常见的图片元数据就是图片文件的 属性>详细信息 这一页,如下图所示:

_images/metadata.png

3.7.2. Exif信息

Exif信息,是可交换图像文件的缩写,是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。Exif可以附加于JPEG、TIFF、RIFF等文件之中,为其增加有关数码相机拍摄信息的内容和索引图或图像处理软件的版本信息。

Exif信息是可以被任意编辑的,因此只有参考的功能。 Exif所记录的信息非常丰富,主要包含了以下几类信息:

  • 拍摄信息

  • 拍摄器材(机身、镜头、闪光灯等)

  • 拍摄参数(快门速度、光圈F值、ISO速度、焦距、测光模式等)

  • 图像处理参数(锐化、对比度、饱和度、白平衡等)

  • 图像描述及版权信息

  • GPS定位数据

  • 缩略图

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 分辨率单位 一般为PPI

  • Software 软件 显示固件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由指针连接。

_images/exif_1.png

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 版权信息

3.7.3. 使用Pillow读取Exif

  • 通过 Image.info['exif'] 可以直接获取 raw_exif 信息,类型是bytes

  • 通过 Image._getexif() 方法,获取图像exif信息,类型是字典

  • 可以通过 ExifTags.TAGS 查看所有的标签号及对应的标签名类型是字典

>>> 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', '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'