Skip to content

Commit bc41ff0

Browse files
committed
add pics
1 parent 94ae56a commit bc41ff0

6 files changed

Lines changed: 389 additions & 39 deletions

File tree

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
# GIF
2+
3+
GIF(Graphics Interchange Format,图像文件存储格式)是CompuServe公司开发的。
4+
5+
它的核心特点是支持动画和透明度,但牺牲了色彩深度。
6+
7+
1987年开发的GIF文件格式版本号是GIF87a,1989年进行了扩充,扩充后的版本号定义为GIF89a。
8+
9+
10+
GIF图像文件以数据块(block)为单位来存储图像的相关信息。
11+
12+
13+
一个GIF文件由表示图形/图像的数据块、数据子块以及显示图形/图像的控制信息块组成,称为GIF数据流(Data Stream)。
14+
15+
16+
数据流中的所有控制信息块和数据块都必须在文件头(Header)和文件结束块(Trailer)之间 。
17+
18+
GIF文件格式采用了LZW(Lempel-Ziv Walch)压缩算法来存储图像数据,定义了允许用户为图像设置背景的透明(transparency)属性。
19+
20+
此外,GIF文件格式可在一个文件中存放多幅彩色图形/图像。如果在GIF文件中存放有多幅图,它们可以像演幻灯片那样显示或者像动画那样演示。
21+
22+
23+
![Image](https://raw.githubusercontent.com/CharonChui/Pictures/master/gif_1.png?raw=true)
24+
25+
26+
## GIF文件结构
27+
28+
GIF格式的文件结构整体上分为三部分:文件头、GIF数据流、文件结尾。其中,GIF数据流分为全局配置和图像块。
29+
30+
31+
GIF 文件由一系列数据块(Blocks)和扩展块(Extension Blocks)顺序组成。理解这个结构是解析元数据的关键。
32+
​- 文件头 (Header)​​:GIF87a或 GIF89a,标识文件版本: GIF署名(Signature)和版本号(Version):GIF的前6个字节内容是GIF的署名和版本号。我们可以通过前3个字节判断文件是否为GIF格式,后3个字节判断GIF格式的版本。
33+
​- 逻辑屏幕描述符 (Logical Screen Descriptor)​​:定义画布大小和全局调色板信息。
34+
​- 全局调色板 (Global Color Table)​​:可选,定义所有帧共用的颜色表。
35+
​- 数据块​:
36+
​ - 图像描述符 (Image Descriptor)​​:定义帧的图像区域和局部调色板信息。
37+
​ - 基于调色板的图像数据​:使用 LZW 压缩后的像素数据。
38+
​- 扩展块 (Extension Blocks)​​:
39+
​ - 图形控制扩展 (Graphic Control Extension)​​:​最重要的扩展,包含帧的延迟时间(动画速度)、透明色索引和处置方法。
40+
​ - 注释扩展 (Comment Extension)​​:​这是存储纯文本元数据的主要位置!​​
41+
​ - 应用扩展 (Application Extension)​​:用于存储应用程序的特定信息(如 Netscape 的循环次数)。
42+
- 明文扩展、等。
43+
​- 文件终结器 (Trailer)​​:一个分号 ;,标识文件结束。
44+
45+
46+
47+
![Image](https://raw.githubusercontent.com/CharonChui/Pictures/master/gif_2.png?raw=true)
48+
49+
50+
51+
数据块可分成3类:控制块(Control Block),图形描绘块(Graphic-RenderingBlock)和专用块(Special Purpose Block)。
52+
53+
54+
- 控制块: 控制块包含有用来控制数据流(Data Stream)或者设置硬件参数的信息,其成员包括:
55+
- GIF文件头(Header)
56+
- 逻辑屏幕描述块(LogicalScreen Descriptor)
57+
- 图形控制扩展块(GraphicControl Extension)
58+
- 文件结束块(Trailer)
59+
60+
- 图形描绘块:包含有用来描绘在显示设备上显示图形的信息和数据,其成员包括:
61+
- 图像描述块(ImageDescriptor)
62+
- 无格式文本扩展块(PlainText Extension)
63+
- 全局调色板、局部调色板、图像压缩数据和图像说明扩充块。
64+
65+
- 特殊用途数据块;包含有与图像处理无关的信息,其成员包括:
66+
- 注释扩展块(CommentExtension)
67+
- 应用扩展块(ApplicationExtension)
68+
- 除了在控制块中的逻辑屏幕描述块(Logical Screen Descriptor)和全局彩色表(GlobalColor Table)的作用范围是整个数据流(Data Stream)之外, 所有其他控制块仅跟在它们后面的图形描绘块。
69+
70+
71+
72+
第二部分:元数据与 XMP 在 GIF 中的存储位置​
73+
这是一个非常关键的点,也是 GIF 与 JPEG、PNG 等格式最大的不同。
74+
​1. 元数据存储在哪里?​​
75+
GIF 格式没有为 EXIF、IPTC 或 XMP 这类现代、结构化的元数据设计标准的存储位置。它的元数据能力非常有限。
76+
​主要位置:注释扩展块 (Comment Extension)​​
77+
​块标识符​:0x21 0xFE
78+
​内容​:可以包含任意纯文本信息。这是存储版权信息、作者、描述等简单元数据的传统位置。
79+
​限制​:​只能是纯文本,没有键值对或结构化的标准。不同软件写入的格式完全不同。
80+
​次要位置:应用扩展块 (Application Extension)​​
81+
​块标识符​:0x21 0xFF
82+
​内容​:通常被特定应用程序用于存储私有数据。例如,NETSCAPE2.0应用扩展用于指定动画循环次数。
83+
​理论上,某个软件可以自定义一个应用扩展来存储 XMP 数据,但这绝非标准,其他软件很可能无法识别。
84+
85+
86+
​2. XMP 存储在哪里?​​
87+
​标准的、符合 Adobe XMP 规范的元数据通常不存在于 GIF 文件中。​​
88+
​原因​:GIF 格式诞生时,XMP 规范还不存在。GIF 的结构没有为容纳一大段 XML 数据而设计。
89+
​变通方案​:极少数专业软件(如 Adobe 的部分产品)​可能会将 XMP 数据作为一串很长的 XML 文本字符串写入到注释扩展 (Comment Extension)​​ 中。
90+
​现实情况​:​99.9% 的 GIF 文件不包含 XMP 数据。​​ 如果您的目标是读取 XMP,遇到 GIF 格式的概率极低。
91+
92+
93+
94+
95+
96+
97+
98+
99+
100+
101+
102+
103+
104+
105+
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# HEIC
2+
3+
4+
HEIC(High Efficiency Image Container​ 高效图像容器)是苹果公司基于HEIF(高效图像文件格式)和HEVC(高效视频编码)技术开发的一种图像存储格式。自2017年iOS 11系统更新起,该格式被设定为iPhone 7及后续机型的默认照片存储格式,在相同画质下可将文件体积较JPEG减少约50%。
5+
6+
7+
High Efficiency Image File Format (HEIF, 发音为:heef),由 Moving Picture Experts Group ( MPEG,即动态图像专家组) 于2013年开发,它基于ISOBMFF标准。HEIF是一个容器的图片格式,它可以包含图片和图片序列(一个文件可以包含不止一个图片)。当前的编码格式有:HEVC 和H.264/MPEG-4 AVC 两种,并且未来可能有新的编码格式加入。
8+
9+
10+
11+
### HEIF和HEIC的关系
12+
13+
- HEIF是规则、HEIC是实例。
14+
- HEIF定义了如何存储图像、图像序列(动画、连拍)、音频和元数据。
15+
- 而HEIC文件是遵循HEIF规则,并使用HEVC(H.265)编码来压缩图像数据的具体文件。
16+
- .HEIC只是一个HEIF文件格式的一种扩展名,言外之意是:HEIF不仅有.HEIC这种扩展名,还有其它的,比如说: .HEIF和.avci,它们都是属于HEIF文件格式。当然,常见的只有.heif和.heic这两种,而.avci 很少见。
17+
18+
19+
20+
HEIF 的强大源于其现代的设计理念,它本质上是一个基于 ISO 基础媒体文件格式(ISOBMFF)的容器,该格式也是 MP4 视频的基础。
21+
22+
23+
​1. 核心结构:'box' (盒子) 体系​
24+
25+
HEIF/HEIC 文件由一系列嵌套的 ​​'box'​​(或称 'atom') 组成。每个 'box' 都有一个头部(声明类型和大小)和负载(数据)。
26+
​- ftyp​:文件类型盒,标识这是一个 HEIC 文件。
27+
​- meta​:元数据盒,是最重要的盒子,包含了描述图像数据的各种信息。
28+
​- mdat​:媒体数据盒,存储实际的、经过压缩的图像比特流。
29+
30+
31+
32+
33+
34+
35+
36+
37+
38+
39+
40+
41+
42+

VideoDevelopment/图片格式/JPEG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ JPEG(Joint Photographic Experts Group),全称为联合图像专家小组,
55

66

77

8-
JPEG只描述一副图像如何转换成一组数据流,而不论这些字节存储在何种介质上。由独立JPEG组创立的另一个进阶标准,JFIF(JPEGFileInterchangeFormat,JPEG文件交换格式)则描述JPEG数据流如何生成适于电脑存储或传送的图像。在一般应用中,我们从数码相机等来源获得的“JPEG文件”,指的就是JFIF文件,有时是ExifJPEG文件。
8+
JPEG只描述一副图像如何转换成一组数据流,而不论这些字节存储在何种介质上。
9+
10+
由独立JPEG组创立的另一个进阶标准,JFIF(JPEG File Interchange Format,JPEG文件交换格式)则描述JPEG数据流如何生成适于电脑存储或传送的图像。在一般应用中,我们从数码相机等来源获得的“JPEG文件”,指的就是JFIF文件,有时是ExifJPEG文件。
911

1012

1113
该格式采用有损压缩算法,通过牺牲部分画质换取较小文件体积,压缩过程包含色彩空间转换(RGB转YCbCr)、离散余弦变换(DCT)、量化和熵编码等步骤。

VideoDevelopment/图片格式/PNG.md

Lines changed: 34 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -12,24 +12,27 @@ PNG图像格式文件(或者称为数据流)由一个8字节的PNG文件署
1212
1. 文件署名域(Magic Number)​
1313

1414

15-
8字节的PNG文件署名域用来识别该文件是不是PNG文件。该域的值是
15+
8字节的PNG文件署名域用来识别该文件是不是PNG文件。该域的值是:
1616

17-
十进制数137 80 78 71 13 10 26 10
18-
十六进制数 89 50 4e 47 0d 0a 1a 0a
17+
- 十进制数137 80 78 71 13 10 26 10
18+
- 十六进制数 89 50 4e 47 0d 0a 1a 0a
1919

2020

2121

22-
固定 8 字节:89 50 4E 47 0D 0A 1A 0A:
22+
固定8字节:89 50 4E 47 0D 0A 1A 0A:
2323
- 89:高位设置,防止被误判为文本文件。
2424
- 50 4E 47:ASCII "PNG"。
2525
- 0D 0A:DOS 风格的换行符,用于换行符转换检测。
2626
- 1A:DOS 的 EOF(文件结束)字符。
2727
- 0A:Unix 风格的换行符。
2828

29-
任何 PNG 解析器首先都必须检查这 8 个字节。​​
29+
任何PNG解析器首先都必须检查这8个字节。​​
3030

3131

32-
PNG定义了两种类型的数据块,一种是称为关键数据块(critical chunk),这是必需的数据块,另一种叫做辅助数据块(ancillary chunks),这是可选的数据块。
32+
PNG定义了两种类型的数据块:
33+
34+
- 一种是称为关键数据块(critical chunk),这是必需的数据块
35+
- 另一种叫做辅助数据块(ancillary chunks),这是可选的数据块。
3336

3437
2. 数据块(Chunk)结构​
3538

@@ -76,20 +79,22 @@ PNG定义了两种类型的数据块,一种是称为关键数据块(critical
7679
| ​IEND​ || 图像结束标记 | 无数据 |
7780

7881

79-
- IHDR:文件头数据块IHDR(header chunk):它包含有PNG文件中存储的图像数据的基本信息,并要作为第一个数据块出现在PNG数据流中,而且一个PNG数据流中只能有一个文件头数据块。
82+
- IHDR:文件头数据块IHDR(header chunk):
83+
84+
它包含有PNG文件中存储的图像数据的基本信息,并要作为第一个数据块出现在PNG数据流中,而且一个PNG数据流中只能有一个文件头数据块。
8085
文件头数据块由13字节组成,包含图像宽度(4字节)、图像高度(4字节)、图像深度(1字节)、颜色类型(1字节)、压缩方法(1字节)、滤波器方法(1字节)、隔行扫描方法(1字节)
8186

82-
- PLTE调色板数据块PLTE(palette chunk)包含有与索引彩色图像(indexed-color image)相关的彩色变换数据,它仅与索引彩色图像有关,而且要放在图像数据块(image data chunk)之前。PLTE数据块是定义图像的调色板信息,PLTE可以包含1~256个调色板信息,每一个调色板信息由3个字节组成。
83-
- IDAT图像数据块IDAT(image data chunk):它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。IDAT存放着图像真正的数据信息,因此,如果能够了解IDAT的结构,我们就可以很方便的生成PNG图像。
84-
- IEND图像结束数据IEND(image trailer chunk):它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。如果我们仔细观察PNG文件,我们会发现,文件的结尾12个字符看起来总应该是这样的:
87+
- PLTE: 调色板数据块PLTE(palette chunk)包含有与索引彩色图像(indexed-color image)相关的彩色变换数据,它仅与索引彩色图像有关,而且要放在图像数据块(image data chunk)之前。PLTE数据块是定义图像的调色板信息,PLTE可以包含1~256个调色板信息,每一个调色板信息由3个字节组成。
88+
- IDAT: 图像数据块IDAT(image data chunk):它存储实际的数据,在数据流中可包含多个连续顺序的图像数据块。IDAT存放着图像真正的数据信息,因此,如果能够了解IDAT的结构,我们就可以很方便的生成PNG图像。
89+
- IEND: 图像结束数据IEND(image trailer chunk):它用来标记PNG文件或者数据流已经结束,并且必须要放在文件的尾部。如果我们仔细观察PNG文件,我们会发现,文件的结尾12个字符看起来总应该是这样的:
8590
0000000049454E44AE426082,不难明白,由于数据块结构的定义,IEND数据块的长度总是0(00 00 00 00,除非人为加入信息),数据标识总是IEND(49 45 4E 44),因此,CRC码也总是AE 42 60 82。
8691

8792
除了表示数据块开始的IHDR必须放在最前面, 表示PNG文件结束的IEND数据块放在最后面之外,其他数据块的存放顺序没有限制。
8893

8994

9095
4. 辅助数据块(Ancillary Chunks)​​
9196

92-
常见的有
97+
常见的有:
9398

9499
| 块类型 | 说明 |
95100

@@ -159,6 +164,7 @@ Keywords SHOULD be .
159164
- chosen to minimize the chance that the same keyword is used for incompatible purposes by different applications.
160165

161166
## 所有块
167+
162168
The constraints on the positioning of the individual chunks are listed in Table 7 and illustrated diagrammatically for static images in Figure 11 and Figure 12, for animated images where the static image forms the first frame in Figure 13 and Figure 14, and for animated images where the static image is not part of the animation in Figure 15 and Figure 16. These lattice diagrams represent the constraints on positioning imposed by this specification. The lines in the diagrams define partial ordering relationships. Chunks higher up shall appear before chunks lower down. Chunks which are horizontally aligned and appear between two other chunk types (higher and lower than the horizontally aligned chunks) may appear in any order between the two higher and lower chunk types to which they are connected. The superscript associated with the chunk type is defined in Table 8. It indicates whether the chunk is mandatory, optional, or may appear more than once. A vertical bar between two chunk types indicates alternatives.
163169

164170
Table 7 Chunk ordering rules
@@ -206,42 +212,32 @@ The eXIf chunk contains metadata concerning the original image data. If the imag
206212

207213

208214

209-
PNG 格式中的 ​eXIf 块​ 和 ​zTXt 块​ 虽然都是用于存储元数据,但其设计目的、内部结构和适用场景有本质区别。
215+
PNG格式中的eXIf块​和​zTXt块​虽然都是用于存储元数据,但其设计目的、内部结构和适用场景有本质区别。
210216

211217

212-
213-
好的,这是一个非常核心的问题。PNG 格式中的 ​eXIf 块​ 和 ​zTXt 块​ 虽然都是用于存储元数据,但其设计目的、内部结构和适用场景有本质区别。
218+
PNG 格式中的eXIf块​和zTXt块​ 虽然都是用于存储元数据,但其设计目的、内部结构和适用场景有本质区别。
214219

215220
为了更直观地理解它们的区别,我们可以通过以下流程图来快速判断哪种块更适合你的需求:
216221
​eXIf 块 (Chunk Type: 65 58 49 66 -> ASCII "eXIf")​​
217222

218223
​1. 作用​
219-
220-
​唯一目的​:用于在 PNG 图像中嵌入 ​Exif(Exchangeable Image File Format)数据。
221-
222-
​内容​:Exif 数据是一套高度标准化的元数据规范,主要用于记录数码照片的拍摄参数和设备信息。例如:
223-
224-
​相机参数​:光圈、快门速度、ISO、焦距、镜头型号
225-
226-
​设备信息​:相机制造商、型号
227-
228-
​时间信息​:照片原始拍摄时间(DateTimeOriginal)
229-
230-
​位置信息​:GPS 坐标(经度、纬度、高度)
231-
232-
​版权信息​:作者、版权说明
233-
234-
​缩略图​:嵌入式的小尺寸预览图
235-
236-
237-
238-
你应该选择哪一个?​​
239-
224+
唯一目的​:用于在 PNG 图像中嵌入 ​Exif(Exchangeable Image File Format)数据。
225+
​内容​:Exif 数据是一套高度标准化的元数据规范,主要用于记录数码照片的拍摄参数和设备信息。例如:
226+
​- 相机参数​:光圈、快门速度、ISO、焦距、镜头型号
227+
​- 设备信息​:相机制造商、型号
228+
​- 时间信息​:照片原始拍摄时间(DateTimeOriginal)
229+
​- 位置信息​:GPS 坐标(经度、纬度、高度)
230+
​- 版权信息​:作者、版权说明
231+
​- 缩略图​:嵌入式的小尺寸预览图
232+
233+
234+
235+
### 应该选择哪一个?​​
236+
240237
​要保存相机的拍摄信息(光圈、快门、GPS等)?​​
241-
242238
-> 使用 ​eXIf 块。(例如:用 exiftool -tagsFromFile source.jpg -all:all拷贝)
243-
239+
244240
​要写入自己定义的文字、配置或标识(如 aigc:{"model":"GPT-4"})?​​
245-
246241
-> 使用 ​zTXt 块。(例如:用 exiftool -zTXt:YourKey="Your Value"写入)
242+
247243
​简单总结:eXIf 用于“相机说什么”,zTXt 用于“你想说什么”。​

0 commit comments

Comments
 (0)