首页 > 解决方案 > 非常接近于从字节构建未压缩的动画 GIF - 但它有一个我无法检测到的错误

问题描述

我正在 Mathematica 中构建一个程序,它生成非常简单的 GIFS,可以在单色方块之间翻转。它的设计使图像数据未压缩,并且不使用大多数动画 GIF 使用的 LZW 压缩。我遇到过非动画的未压缩 GIF 的示例,它们只是单个图像,并且我遇到过非常简单的动画 gif,它们会改变颜色,但它们确实使用 LZW。我还没有找到未压缩和动画的示例,这就是我想要做的。

到目前为止,我的程序成功地创建了单帧 gif 以及具有多个帧的动画 gif,但是动画 gif 总是为每一帧呈现相同的颜色,或者只是一些像素改变颜色,而不是整个帧。我正在尝试创建循环播放的动画 gif,例如,从红色方块到黑色方块。

下面是我的程序创建的 GIF 的逐块字节。我预计这是 GIF 是一个 2 像素乘 2 像素的正方形,其中第一帧是红色,然后第二帧是黑色。相反,我得到了两帧红色。

标题:47,49,46,38,39,61 逻辑屏幕描述符:02,00,02,00,f0,00,00 全局颜色表:ff,00,00,00,00,00 应用程序扩展块:21 ,ff,0b,4e,45,54,53,43,41,50,45,32, 2e,30,03,01,00,00,00 图形扩展控件:21,f9,04,00,88, 13,00,00 ImageDescriptor:2c,00,00,00,00,02,00,02,00,00 ImageData Block: 01,03,02,01,01,03,02,01,01,00, 图形扩展控制:21,f9,04,00,88,13,00,00 ImageDescriptor:2c,00,00,00,00,02,00,02,00,00, ImageData Block:01,03,02,01 ,01,03,02,01,01,00 评论扩展:21,fe,00,00 预告片:3B

如果您想在十六进制编辑器中查看这些字节,这里是完整的字节串:47,49,46,38,39,61,02,00,02,00,f0,00,00,ff, 00,00,00,00,00,21,ff,0b,4e,45,54,53,43,41,50,45,32,2e,30,03,01,00,00,00,21, f9,04,00,88,13,00,00,2c,00,00,00,00,02,00,02,00,00,01,03,02,01,01,03,02,01, 01,00,21,f9,04,00,88,13,00,00,2c,00,00,00,00,02,00,02,00,00,01,03,02,01,01, 03,02,01,01,00,21,fe,00,00,3B

我目前对问题的思考:LZW 最小大小(图像数据块的第一个字节)或清除代码(图像数据块的第三个字节)是否有问题,因为我发现当我将它们更改为不同的值时,有时会出现一个或两个黑色像素以及 1-2 个红色像素,但我无法找出错误的模式。

我还想知道将背景颜色设置为红色是否让我对错误产生了误导性的理解——实际上可能没有或只有很少的像素被绘制,但我无法判断,因为背景颜色与 as 像素相同颜色?

这是我在 Mathematica 中工作的程序——它有部分评论,但我还没有完成评论:

https://www.wolframcloud.com/obj/8b483039-494b-476f-844d-a0f39d1d663b

最后,这些是我遇到的最好的资源,我的程序是基于这些资源的:

GifLib – Gif 中有什么 http://giflib.sourceforge.net/whatsinagif/index.html

Gif 文件规范 https://www.w3.org/Graphics/GIF/spec-gif89a.txt

维基百科 https://en.wikipedia.org/wiki/GIF

标签: image-processingcompressionwolfram-mathematicagif

解决方案


推荐阅读