【发布时间】:2019-05-04 08:26:33
【问题描述】:
我无法理解如何为 .gif 文件压缩 89a specification 的图像数据。例如,我正在尝试制作 3x2 .GIF。让我构建一个示例颜色代码表并通过一个示例 [我认为是正确的]。
Color code | Color
------------------
0 | Brown
1 | Red
2 | Green
3 | Black
我要创建的图像是这个。
3x2 pixels (6 pixels total)
----------
Br Br Br
Br R Br
使用 LZW 压缩会引导我完成这个过程。这是我得到的最终代码表。
Code table
----------
# | code
0 | 0
1 | 1
2 | 2
3 | 3
4 | clear
5 | eoi // end of information
6 | 0 0
7 | 0 0 0
8 | 0 1
9 | 1 0
最终值为4 0 6 0 1 0 5,这是我的代码。因为我写了一个代码0 0 0,这个代码值等于7,所以我不得不将我的代码大小从3> 4位增加到后续代码。所以,这是我的图像数据的字节(来自我的代码表)。
100 - 4
000 - 0
110 - 6
0000 - 0
0001 - 1
0000 - 0
0101 - 5
我最终将我的图像数据编码为
10000100 - 132
00100001 - 33
10100000 - 160
00000000 - 0
最终在我的最终 .gif 文件中看起来像这样(我在与图像数据对应的值周围加上了括号)
47 49 46 38 39 61 03 00 02 00 f1 00 00 b9 7a 56
ff 00 00 00 ff 00 00 00 00 21 ff 0b 4e 45 54 53
43 41 50 45 32 2e 30 03 01 ff ff 00 21 f9 04 04
64 00 00 00 2c 00 00 00 00 03 00 02 00 00 [02 04
84 21 a0 00 00] 3b
// Explanation
02 - Minimum LZW code size
04 - Data sub-block of 4 bytes
84 - 132 in decimal
21 - 33 in decimal
a0 - 160 in decimal
00 - 0 in decimal
00 - Termination byte
我的图像看起来像这样(为什么这里是绿色而不是红色?)。因为 2x3 像素有点难以阅读,所以我把图片搞砸了。
我缺少一些基本的东西吗?感谢您抽出宝贵时间和我一起研究这个问题。
【问题讨论】: