记录各种格式图片元数据结构

JPEG:

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

------------------
名称  标记码  说明
------------------
SOI   D8     文件头
EOI   D9     文件尾
SOF0  C0     帧开始(标准 JPEG)
SOF1  C1     同上
DHT   C4     定义 Huffman 表(霍夫曼表)
SOS   DA     扫描行开始
DQT   DB     定义量化表
DRI   DD     定义重新开始间隔
APP0  E0     定义交换格式和图像识别信息
DNL   DC     标记码
COM   FE     注释

JPEG文件是以FFD8开头,FFD9结尾,中间存储着以0xFFE0~0xFFEF 为标志的数据段。

JPEG 文件中有一些形如 "0xFF" 这样的数据,它们被称为"标志(Marker)",它表示 JPEG 信息数据段。元数据Exif 使用 APP1(0xFFE1)标记来避免与JFIF格式的冲突,且每一个 Exif 文件格式都开始于它。格式如:0xFF+Marker Number(1 byte)+Data size(2 bytes)+Data(n bytes)。Data数据符合TIFF格式规范。

PNG:

对于一个PNG文件来说,其文件头总是由位固定的字节来描述的,HEX: 89 50 4E 47 0D 0A 1A 0A,后续由3个以上的PNG的数据块(Chunk)按照特定的顺序组成。

PNG文件中,每个数据块由4个部分组成,如下:

名称字节数说明
Length (长度)4字节指定数据块中数据域的长度,其长度不超过(231-1)字节
Chunk Type Code (数据块类型码)4字节数据块类型码由ASCII字母(A-Z和a-z)组成
Chunk Data (数据块数据)可变长度存储按照Chunk Type Code指定的数据
CRC (循环冗余检测)4字节存储用来检测是否有错误的循环冗余码

PNG图片CHUNK类型有很多,元数据信息存储在eXIf/iTXt/zTXt/tEXt中的某一个数据块中,数据块数据符合TIFF格式规范。其中eXIf数据块存储的直接是TIFF格式的元数据信息。其他txt存储多种信息,以"Raw profile type exif"或者"Raw profile type APP1"开头的,则为exif元数据信息。

tEXt以"Raw profile type exif" + "0x00" +rawText组成。

zTXt是压缩文本内容,以"Raw profile type exif" + "0x00"+"1位压缩标志"+压缩文本组成,解压完是rawText格式。

iTXt既有压缩文本也有不压缩文本,不压缩格式文本和解压完的文本都是rawText格式,iTXt格式如下:

Keyword:             1-79 bytes (character string)
Null separator:      1 byte
Compression flag:    1 byte
Compression method:  1 byte
Language tag:        0 or more bytes (character string)
Null separator:      1 byte
Translated keyword:  0 or more bytes
Null separator:      1 byte
Text:                0 or more bytes

webp:

以字节序列 "RIFF" 开始,紧接着是4个字节的文件大小(以little-endian格式存储),然后是字节序列 "WEBP"。元数据格式如:"EXIF" + chunksize(4字节) +Data。

DNG:

dng图片本身就是符合TIFF规范的图片。

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在设计元数据数据结构时,需要考虑以下几点: 1. 元数据的类型:元数据可能是文本、图像、视频、音频等不同类型的数据,因此需要为每种类型设计不同的存储方式。 2. 元数据的内容:元数据可能包含各种信息,如标题、作者、发布日期、描述等,因此需要为每种信息设计不同的字段。 3. 元数据的结构:元数据可能包含多个不同的字段,因此需要考虑将这些字段组织成什么样的结构,比如使用数组、链表、树等。 4. 元数据的使用场景:元数据可能被用于不同的场景,如搜索、推荐、分类等,因此需要考虑为这些场景设计的数据结构。 根据以上四点,我们可以设计出如下的元数据数据结构: ``` struct MetaData { // 元数据的类型 DataType type; // 元数据的内容 struct Content { // 标题 string title; // 作者 string author; // 发布日期 string date; // 描述 string description; // 其他信息(可能包含多个字段) map<string, string> other; } content; // ### 回答2: 元数据是用于描述和定义数据的数据,有助于理解、管理和使用数据。一个描述的元数据数据结构可以包括以下几个主要组成部分: 1. 标识信息:用于唯一标识元数据的信息,如元数据的名称、ID或代码。这部分信息可以帮助用户快速区分和识别不同的元数据。 2. 描述信息:包括元数据的详细说明和定义,如元数据的类型、格式、长度、取值范围等。这些信息可以帮助用户了解元数据的特性和约束条件。 3. 来源信息:指明元数据的来源和采集方式,如元数据的创建者、创建时间、更新时间等。这些信息可以帮助用户跟踪和了解元数据的可靠性和有效性。 4. 关联信息:指明元数据与其他数据或元数据的关联关系。例如,可以描述元数据与某个特定数据集的关系,或者与其他相关元数据的关系。这些信息可以帮助用户在数据分析和应用过程中理解元数据的内在联系。 5. 访问控制信息:指定元数据的访问权限和安全控制机制,如谁可以查看、修改或删除元数据。这些信息可以保护元数据的安全性和合规性。 6. 注释信息:用于记录用户对于元数据的注释和说明,如元数据的用途、特殊要求或注意事项等。这些信息可以帮助用户更好地理解和利用元数据。 以上这些组成部分可以通过一种易于使用和易于扩展的数据结构(如JSON或XML)来进行组织和存储。元数据数据结构的设计应该考虑到数据的特点和需求,并且能够适应不同应用场景和数据管理要求。 ### 回答3: 元数据是关于数据的数据,用于描述数据的属性、特征、结构以及其他相关信息。设计一个描述的元数据数据结构需要考虑以下几个方面: 1. 标识符:元数据数据结构应包含一个唯一的标识符,以便对特定元数据进行引用和检索。 2. 名称和描述:元数据数据结构应包含一个名称和描述字段,用于描述元数据的含义和作用。 3. 数据类型:元数据数据结构应包含一个字段用于指定元数据的数据类型,例如整数、字符串、日期等。 4. 值范围:对于一些元数据,可能需要指明其取值范围,例如枚举型元数据需要列出可能的取值。 5. 约束条件:元数据数据结构应包含一个字段用于指定元数据的约束条件,例如长度、格式等。 6. 属性:元数据数据结构可以包含一些属性字段,用于存储与元数据相关的一些附加信息,例如创建人、创建时间等。 7. 关联关系:元数据数据结构可以包含一些关联关系字段,用于与其他元数据建立联系,例如父子关系、依赖关系等。 8. 版本号:由于元数据可能会发生变化,元数据数据结构可以包含一个版本号字段,用于标识元数据的版本。 9. 审核状态:元数据数据结构可以包含一个审核状态字段,用于表示元数据是否已审核通过。 综上所述,一个描述的元数据数据结构可以包括标识符、名称和描述、数据类型、值范围、约束条件、属性、关联关系、版本号和审核状态等字段。通过这些字段的组合,可以全面准确地描述和管理元数据的相关信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_46078559

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值