前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JPEG/Exif/TIFF格式解读(2):图片元数据保存及EXIF详解

JPEG/Exif/TIFF格式解读(2):图片元数据保存及EXIF详解

原创
作者头像
周陆军博客
发布2023-04-22 23:29:51
5.8K0
发布2023-04-22 23:29:51
举报
文章被收录于专栏:前端博客前端博客

图片元数据(Metadata)

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

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

  • EXIF:通常被数码相机在拍摄照片时自动添加,比如相机型号、镜头、曝光、图片尺寸等信息
  • IPTF:比如图片标题、关键字、说明、作者、版权等信息。主要是由人工在后期通过软件写入的数据。
  • XMP:XMP实际上是一种元数据存储和管理的标准,可以将Exif,IPTC或其他的数据都按XMP统一的格式存放在图像文件中。 但是当將JPG转换为其它格式如png, pdf等时,由于这些格式都不支持Exif格式,所以Exif信息就会丢失。为了解决这个问题,Adobe公司推出用XMP管理元数据的方法,即将图像中的元数据如Exif,IPTC等都纳入XMP库中,由XMP管理。

元数据的嵌入方式因图像格式而异,不同格式的图像文件有不同的嵌入方式。

如JPG、TIF就是EXIF,而PNG

在windows上,图片元数据查看就是就是图片文件的 【属性】——>【详细信息】 这一页,如下图所示:

3285850-03434dcfd7c66f8c.jpeg
3285850-03434dcfd7c66f8c.jpeg

Exif 是什么?

Exif为Exchangeable Image File(可交换图像文件)的缩写,是专门为数码相机的照片设定的,就是用来记录拍摄图像时的各种信息:图像信息(厂商,分辨率等),相机拍摄记录(ISO,白平衡,饱和度,锐度等),缩略图(缩略图宽度,高度等),gps(拍摄时的经度,纬度,高度)等,将这些信息按照JPEG文件标准放在图像文件头部。

Exif所记录主要的几类信息:

  • 拍摄信息
  • 拍摄器材(机身、镜头、闪光灯等)
  • 拍摄参数(快门速度、光圈F值、ISO速度、焦距、测光模式等)
  • 图像处理参数(锐化、对比度、饱和度、白平衡等)
  • 图像描述及版权信息
  • GPS定位数据
  • 缩略图

Exif最初由日本电子工业发展协会(JEIDA --Japan Electronic Industry Development Association)?在1996年制定(1.0),1998年省级到了2.1版本,增加对了音频文件的支持。目前的最新版本是2.21 版。国际标准化组织(ISO)正在制订的相机文件设计标准(DCF -- Design role for Camera File system/相机文件系统设计规则)可能以Exif2.1为基础。

目前几乎新型的数码相机都使用Exif文件格式来存储图像.?

关于EXIF与JPEG的关系

Exif 文件实际是JPEG文件的一种,遵从JPEG标准,因此加入 EXIF 信息并不影响 JPEG 文件的查看。只是在文件头信息中增加了有关拍摄信息的内容和索引图。

所以你可以使用任何支持JPEG格式的图像工具软件观看或修改Exif文件,但打开时可能看不到Exif信息,一旦修改,Exif信息可能丢失。

Basically,?Exif file format is the same as JPEG file format.?Exif inserts some of image/digicam information data and thumbnail image to JPEG in conformity to JPEG specification.Therefore you can view Exif format image files by JPEG compliant Internet browser/Picture viewer/Photo retouch software etc. as a usual JPEG image files.

简单来说,EXIF 信息就是由数码相机在拍摄过程中采集一系列的信息,然后把信息放置在我们熟知的 JPEG/TIFF 文件的头部, 也就是说 EXIF 信息是镶嵌在 JPEG/TIFF 图像文件格式内的一组拍摄参数,主要包括摄影时的光圈、快门、ISO、日期时间等各种与当时摄影条件相关的讯息,相机品牌型号,色彩编码,拍摄时录制的声音以及全球定位系统(GPS)等信息。

EXIF文件格式说明

Exif可以附加于JPEG、TIFF、RIFF、CR2、NEF、XMP等文件之中——PNG规范中不包含嵌入式EXIF,

如何分析图片文件里面的Exif信息,截取图片文件里面的exif数据块?

Exif信息以0xFFE1作为开头标记,后两个字节表示Exif信息的长度。所以Exif信息最大为64 kb,而内部采用TIFF格式——Tagged Image File Format(标签图像文件格式——最初的设计目的是为了1980年代中期桌面扫描仪厂商达成一个公用的扫描图像文件格式,JPEG格式的数据也能被嵌进其他类型的文件格式中,像是TIFF类型的文件格式。)。

Every JPEG file?starts from binary value '0xFFD8', ends by binary value '0xFFD9'. There are several binary 0xFFXX data in JPEG data, they are called as "Marker",?and it means the period of JPEG information data. 0xFFD8 means SOI(Start of image), 0xFFD9 means EOI(End of image). These two special Markers have no data following, the other Markers have data with it. Basic format of Marker is below.

很多图片没有后缀,图片还是能识别,靠说明?

如何识别JEPG文件的

其实很简单,就是判断前面3个字节是什么,如果发现是FF D8 FF开始,那就认为它是JEPG图片。

JPG文件是由一段段的数据构成的组成的(segment),段的多少和长度并不是一定的。只要包含了足够的信息,该JPEG文件就能够被打开。

JPEG格式和标记

JPEG图片格式组成部分:SOI(文件头)+APP0(图像识别信息)+ DQT(定义量化表)+ SOF0(图像基本信息)+ DHT(定义Huffman表) + DRI(定义重新开始间隔)+ SOS(扫描行开始)+ EOI(文件尾)

003yXckxzy7poBkOYsf57&690.jpeg
003yXckxzy7poBkOYsf57&690.jpeg

以16进制模式打开JPG文件,就会发现

JPEG 文件中有一些形如 0xFF** 这样的数据,它们被称为“标志(Marker)”,它表示 JPEG 信息数据段。例如 0xFFD8 代表 SOI(Start of image), 0xFFD9 代表 EOI(End of image)。

标志 0xFFE0~0xFFEF 被称为 "Application Marker",它们不是解码 JPEG 文件必须的,可以被用来存储配置信息等。EXIF 也是利用这个标志段来插入信息的,具体来说,是 APP1(0xFFE1) Marker。所有的 EXIF 信息都存储在该数据段。

JPEG format and Marker

SOI Marker

Marker XX size=SSSS

Marker YY size=TTTT

SOS Marker size=UUUU

Image stream

EOI Marker

FFD8

FFXX

SSSS

DDDD......

FFYY

TTTT

DDDD......

FFDA

UUUU

DDDD....

I I I I....

FFD9

0xFFE0~0xFFEF之间的标记被叫做 "应用标记", 它们在JPEG图像解码中不是必须存在的. 它们被使用于用户的应用程序之中. 例如, 老款的olympus/canon/casio/agfa 数字相机使用 JFIF(JPEG文件交换格式/JPEG File Interchange Format)来存储图像. JFIF 使用 APP0(0xFFE0) 标记来插入数字相机的配置信息数据和缩略图.

Exif也使用应用标记来插入数据, 但是Exif 使用 APP1(0xFFE1)标记来避免与JFIF格式的 冲突. 且每一个 Exif 文件格式都开始于它, 如

SOI 标记

标记 XX 的大小=SSSS

标记 YY 的大小=TTTT

SOS 标记 的大小=UUUU

图像数据流

EOI 标记

FFD8

FFXXlo0p

SSSS

DDDD......

FFYY

TTTT

DDDD......

FFDA

UUUU

DDDD....

I I I I....

FFD9

Exif也使用应用标记来插入数据, 但是Exif 使用 APP1(0xFFE1)标记来避免与JFIF格式的 冲突. 且每一个 Exif 文件格式都开始于它, 如;

Marker used by Exif

0xFF+Marker Number(1 byte)+Data size(2 bytes)+Data(n bytes)

SOI Marker

APP1 Marker

APP1 Data

Other Marker

FFD8

FFE1

SSSS 457869660000 TTTT......

FFXX SSSS DDDD......

该图像文件从SOI(0xFFD8) 标记开始, 因此它是一个 JPEG 文件. 后面马上跟着 APP1 标记. 而它的所有 Exif数据都被存储在 APP1 数据域中. 上面的 "SSSS" 这部分表示 APP1 数据域 (Exif data area)的大小. 请注意这里的大小 "SSSS" 包含描述符本身的大小.

在 "SSSS"后面, 是 APP1 的数据. 其中第一个部分是一个特殊的数据,它用来标识是否是 Exif, 其值是ASCII 字符 "Exif" 和 两个0x00字节 的组合字符串.

在 APP1 标记域的后面是, 跟随着其他的 JPEG 标记

exif数据解析

如果图片图片是16进制数据,如下:

FF D8??FF E0 00 10 4A 46 49 46 00 01 02 01 00 60 00 60? ?00 00??FF E1 08 32 45 78 69 66 00 00 49 49 10 60 00 60? ?20 00 ……?FFD9??

那么FF D8为SOI标志位,FF E0为exif文件起始位,后面四位 为exif marker信息的长度。取这个长度的数据解析为TIFFdata数据,exif直接解析为字符串貌似也没有问题。?

FF D8

????FF?E0 00 10?4A 46 49 46 00 01 02 01 00 60 00 60? ?00 00? ? ? ? mark0,00 10 =16位

FF?E1 08 32?45 78 69 66 00 00 49 49?10 60 00 60? ?20 00 ……?mark1,00 10 =2098位

????……?

? ?Image stream

FFD9

jpeg二进制代码源码分析
jpeg二进制代码源码分析

exif marker数据结构

Exif的数据结构 (APP1)大致如下面那样. 这是"Intel"字节序的情况, 并且它包含了JPEG 格式的 缩略图. 就像上面描述的那样, Exif 数据开始于ASCII字符 "Exif" 和2个字节的0x00, 后面才是 Exif的数据. Exif 使用 TIFF 格式来存储数据. 想获取TIFF的更多的细节的话, 请参考?"TIFF6.0规格说明(TIFF6.0 specification)".

FFE1

APP1 标记

SSSS

APP1 数据

APP1 数据大小

45786966 0000

Exif 头

49492A00 08000000

TIFF 头

XXXX. . . .

IFD0 (主图像)

目录

LLLLLLLL

连接到 IFD1

XXXX. . . .

IFD0的数据域

XXXX. . . .

Exif 子IFD

目录

00000000

连接结束

XXXX. . . .

Exif 子IFD的数据域

XXXX. . . .

Interoperability IFD

Directory

00000000

连接结束

XXXX. . . .

Interoperability IFD的数据域

XXXX. . . .

Makernote IFD

Directory

00000000

连接结束

XXXX. . . .

Makernote IFD的数据域

XXXX. . . .

IFD1(缩略图像)

目录

00000000

连接结束

XXXX. . . .

IFD1的数据域

FFD8XXXX. . . XXXXFFD9

缩略图像

Exif与TIFF

TIFF是一种图像文件格式,包含图像数据和元数据。由于其简单灵活,所以使用很广,具体阅读此篇《JPEG/Exif/TIFF格式解读(3):TIFF

我们只需识别出他头部,然后解码出信息即可。这些信息,有个编码表,然后根据头部编码,然后解码里面的内容。

下面是官网给的文件格式说明,可以

  • Tags used by IFD0 (main image),图片文件基本的信息,包括日期、方向、白平衡
  • Tags used by Exif SubIFD,拍照是相机参数设置及其相关等基本信息,如曝光时间、IOS、亮度
  • Tags used by IFD1 (thumbnail image),图片存储相及显示关信息,
  • Misc Tags,文件描述及附加信息,如标题、艺术家,GPS位置信息等。

Tags used by IFD0 (main image)

Tag No.

Tag Name

Format

CompoNo

Desc.

0x010e

ImageDescription

ascii string

Describes image

0x010f

Make

ascii string

Shows manufacturer of digicam

0x0110

Model

ascii string

Shows model number of digicam

0x0112

Orientation

unsigned short

1

The orientation of the camera relative to the scene, when the image ? ? ?was captured. The start point of stored data is, '1' means upper left, '3' ? ? ?lower right, '6' upper right, '8' lower left, '9' ?developer/article/2270873/undefined.

0x011a

XResolution

unsigned rational

1

Display/Print resolution of image. Large number of digicam ? ? ?uses 1/72inch, but it has no mean because personal computer doesn't use ? ? ?this value to display/print out.

0x011b

YResolution

unsigned rational

1

0x0128

ResolutionUnit

unsigned short

1

Unit of XResolution(0x011a)/YResolution(0x011b).?'1' means no-unit,?'2' means inch, '3' means ? ? ?centimeter.

0x0131

Software

ascii string

Shows firmware(internal software of digicam) version number.

0x0132

DateTime

ascii string

20

Date/Time of image was last modified. Data format is "YYYY:MM:DD ? ? ?HH:MM:SS"+0x00, total 20bytes. In usual, it has the same value of ? ? ?DateTimeOriginal(0x9003)

0x013e

WhitePoint

unsigned rational

2

Defines chromaticity of white point of the image. If the image uses ? ? ?CIE Standard Illumination D65(known as international standard of ? ? ?'daylight'), the values are '3127/10000,3290/10000'.

0x013f

PrimaryChromaticities

unsigned rational

6

Defines chromaticity of the primaries of the image. If the image uses ? ? ?CCIR Recommendation 709 primearies, values are ? ? ?'640/1000,330/1000,300/1000,600/1000,150/1000,0/1000'.

0x0211

YCbCrCoefficients

unsigned rational

3

When image format is YCbCr, this value shows a constant to translate ? ? ?it to RGB format. In usual, values are '0.299/0.587/0.114'.

0x0213

YCbCrPositioning

unsigned short

1

When image format is YCbCr and uses 'Subsampling'(cropping of chroma ? ? ?data, all the digicam do that), defines the chroma sample point of ? ? ?subsampling pixel array. '1' means the center of pixel array, '2' means ? ? ?the datum point.

0x0214

ReferenceBlackWhite

unsigned rational

6

Shows reference value of black point/white point. In case of YCbCr ? ? ?format, first 2 show black/white of Y, next 2 are Cb, last 2 are Cr. In ? ? ?case of RGB format, first 2 show black/white of R, next 2 are G, last 2 ? ? ?are B.

0x8298

Copyright

ascii string

Shows copyright information

0x8769

ExifOffset

unsigned long

1

Offset to Exif Sub IFD

更多可以查看:https://www.media.mit.edu/pia/Research/deepview/exif.html

此篇是《JPEG/Exif/TIFF格式解读(5):exif marker Tag ID

参考资料:

图片文件Exif信息详细说明 blog.sina.com.cn/s/blog_651251e60102uz3d.html#AboutExif

图像Exif信息 元数据(Metadata) https://www.jianshu.com/p/a6d67df60e7e

关于图片文件旋转JPEG与EXIF信息??https://blog.csdn.net/yulimin/article/details/102827865

https://www.media.mit.edu/pia/Research/deepview/exif.html

https://baike.baidu.com/item/Exif/422825?fr=aladdin

读取JPG图片的Exif属性(一) - Exif信息简介?https://blog.csdn.net/fioletfly/article/details/53605959

读取JPG图片的Exif属性(二) - C代码实现 https://blog.csdn.net/fioletfly/article/details/54094940

读取JPG图片的Exif属性(三) - Exif属性读取GPS信息代码(C/C++实现)https://blog.csdn.net/fioletfly/article/details/54133422

在jpg图片添加Exif信息的C程序实现?https://blog.csdn.net/psy6653/article/details/79658144

JPEG添加EXIF https://blog.csdn.net/weixin_43549602/article/details/84654965

jpeg图片格式详解?https://blog.csdn.net/yun_hen/article/details/78135122

压缩算法——JPEG2000 编解码原理?https://blog.csdn.net/ytang_/article/details/76571635

PNG、JPEG、BMP等几种图片格式详解 https://www.jianshu.com/p/f5557c0e689e

使用HTTP2和渐进式JPEG图片更快的加载图像 http

转载本站文章《JPEG/Exif/TIFF格式解读(2):图片元数据保存及EXIF详解》, 请注明出处:https://www.zhoulujun.cn/html/theory/multimedia/CG-CV-IP/8397.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 图片元数据(Metadata)
  • Exif 是什么?
    • Exif所记录主要的几类信息:
    • 关于EXIF与JPEG的关系
    • EXIF文件格式说明
    • 如何识别JEPG文件的
    • JPEG格式和标记
    • JPEG format and Marker
    • Marker used by Exif
    • exif数据解析
    • exif marker数据结构
    相关产品与服务
    图片处理
    图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com