问题标签 [lzw]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
846 浏览

image-processing - 解码 GIF87a 光栅数据流的数据字节

我正在尝试从 GIF87a 光栅数据流中解码数据字节。我不确定如何读取 LZW 可变长度代码(以及 LSB...最低有效字节如何首先适合此代码)。栅格数据流开始如下(十六进制):

  • 06 -> 代码大小为 6
  • 6b -> 块字节数为 107
  • 40 -> 清除代码 (2^6),即十进制 64 或十六进制 40
  • 86 -> 实际数据的开始

GIF87a 规范:http ://www.w3.org/Graphics/GIF/spec-gif87.txt

栅格流应该具有指向全局地图(或 LZW 树中的父级)的索引......但我不确定如何阅读它。

有人可以转换前几个字节(从 86 开始)作为示例吗?

0 投票
4 回答
3584 浏览

gif - 是否有一个技巧可以创建一个电视静态的动画 gif 以使其相对较小?

提前道歉,但这并不是一个真正的Photoshop问题。相反,我试图想出一些令人信服的东西,但尽可能利用 gif 格式的压缩和特性来为动画生成尽可能小的文件。

一些限制:

  • 它至少需要 20 或 30 帧。我尝试过更少(因为它们在很大程度上是不可压缩的,一般来说,15 帧的大小是 30 帧的一半)
  • 尺寸需要不小于256x192左右
  • 它不需要是彩色的,甚至不需要全灰度。我看过令人信服的静止图像,只有大约 16 个灰色
  • 它可以有一种模式,但不是人眼就能立即看到的模式。如果有人拍了一帧,一两分钟后可以发现图案(这使它可压缩?)没关系
  • 第 2 帧到第 n 帧可以使用相当多的 alpha,但是当我开始使用大的 alpha 水平条纹时,我的眼睛立刻就注意到了。所以你不会用简单的作弊来积累一堆 RLE。
  • 以上所有,仍然需要在 30-33 毫秒的帧速度下看起来不错。没有变速或依赖任何比这更快的东西。

也可以接受:符合上述约束的 apng。如果你能想到的话,甚至可能是 mpeg(我不知道 DCT 是如何发挥它的魔力的)。

理想情况下,我可以在 250kbyte 范围内得到一些东西,但我会接受任何比我上周制作的 9 meg 怪物小得多的东西。

哦,还有最后一件事:显然我不希望任何人为我提供图形。我只是在寻找一些能让我最终自己到达那里的技巧。

0 投票
1 回答
658 浏览

php - 在 PHP 中解压缩 *.Z 文件

可能重复:
有没有办法使用 php 解压缩 .Z 文件?

寻找任何关于 PHP 中将在 Windows 环境中解压缩 Unix .Z 文件的函数的线索或建议。

0 投票
1 回答
894 浏览

compression - 无损压缩理论,压缩比是否基于模式大小和重复次数?

我想知道以下哪种场景将无损算法应用于具有重复数据的二进制数据的最高比率。

我是否正确假设压缩比取决于模式?

  1. 尺寸
  2. 多次重复

例如二进制数据:

10 10 10 10 10 10 10 10 图案 (10) 尺寸 2,图案 (10) 重复 8

1001 1001 1001 1001图案(1001)尺寸4,图案(1001)重复4

0000000 11111111 图案(0)尺寸1,图案(0)重复8;图案(1)尺寸1,图案(1)重复8;或 0000000 11111111 模式 (0000000) 大小 8,模式 (0000000) 重复 8;图案 (11111111) 尺寸 8,图案 (11111111) 重复 1;

以上哪个实现了最高和最低的压缩比?

提前致谢。

0 投票
1 回答
626 浏览

c - GIF LZW 压缩流中的编码错误

我正在编写一个 C 库来将 SDL_Surfaces 导出为各种格式作为练习,到目前为止,我已经掌握了 BMP、TGA 和 PCX 格式。现在我正在研究 GIF 格式,我觉得我非常接近让它工作。我的实现是这个的修改版本

我目前的问题是编写 GIF LZW 压缩图像数据子块。一切顺利,直到第一个子块中的位置 208。原始文件中的三个字节是(从位置 207 开始):十六进制的“B8 29 B2”,我的是“B8 41 B2”。之后,字节再次“同步”。在压缩流的下方,我可以找到类似的差异,这可能是由第一个错误引起的。我的文件也比原来的短。

我应该注意,我将 lzw_entry 结构的类型从 uint16_t 更改为 int 以允许 -1 作为“空”条目,因为 0 是有效条目。不过,它并没有真正对压缩流产生影响。最初的实现使用未初始化的数据来标记一个空条目。

我想我读错了我的字典值,这就是为什么我得到的位置 208 的另一个代码比预期的要好。否则,我的位打包不正确。

我添加了压缩代码的精简版本。可能是什么问题?另外,我如何才能使我的“字典”数据结构更好或使比特流写入更快?

最后,我也知道我可以在这里和那里优化一些代码:)

更新:我做了更多的测试,并实现了 Aki Suihkonen 建议的位打包算法。它没有明显的区别,它告诉我我在我的 lzw_table 结构中以某种方式错误地查找/存储代码,并且错误在主循环中。

0 投票
1 回答
189 浏览

php - 无法理解 JSend 中 LZW 解压的 php 函数

我正在尝试将 LZW 解压缩器从php 中的JSend转换为 javascript,并且我得到了一个我不太理解的函数。

到目前为止,这是我在 javascript 中所拥有的,但是当我在 javascript 中运行它时,它抱怨sWord没有定义并查看 php 函数,我看不出这不会产生错误?

到目前为止,这是我在 javscript 中的内容:

0 投票
1 回答
1083 浏览

string - 循环滚动算法

我想出了术语循环,希望它不会与现有术语重叠。基本上我正在尝试提出一种算法来查找打印文本中的循环。

从简单到复杂的一些例子

示例 1

鉴于:

我想说:

或算法:

示例 2

鉴于:

我想说:

或算法:

示例 3

鉴于:

我想说:

或算法:

它没有让我想起我知道的任何算法。我觉得有些问题可能是模棱两可的,但现在找到一个解决方案对我来说就足够了。效率总是受欢迎的,但不是强制性的。我怎样才能做到这一点?

编辑

首先感谢大家的讨论。我已经从Rosetta改编了一个LZW算法并在我的输入上运行它:

这给了我:

我有一本字典:

它看起来很适合压缩,但并不是我想要的。我需要的更像是我的示例中算法表示中的压缩,它将具有:

  • 后续序列(如果一个序列重复,则中间不会有其他序列)
  • 没有字典,只有循环
  • 不可约
  • 具有最大序列大小(这将最小化算法表示)
  • 假设允许嵌套循环(与我之前在评论中所说的相反)
0 投票
1 回答
768 浏览

c - GIF LZW 解压提示?

我已经阅读了许多关于 GIF LZW 解压缩的文章,但我仍然对它的工作原理或如何解决编码方面的问题感到困惑,更繁琐的编码位。

据我了解,当我获取 LZW 压缩数据的 GIF 字节流时,流告诉我:

最小代码大小,也就是第一个字节开始的位数。

现在,据我了解,我必须为此添加一个用于明确代码,或者为明确代码和 EOI 代码添加两个。但我很困惑它是哪一个?

所以说我有 3 个颜色代码(01、10、11),假设 EOI 代码(如 00)将遵循最小代码大小(2)的字节为 2 位,或者它将是 3 位以明确代码?还是明文代码/EOI 代码都已计入最小尺寸?

第二个问题是,从文件中读取动态大小的位的最简单方法是什么?因为从偶数字节 (8) 读取奇数位(3 位、12 位等)听起来可能很混乱和错误?

0 投票
3 回答
5104 浏览

compression - tar.Z 文件格式、结构、标头

我想弄清楚 tar.Z 文件的文件布局。(所谓的 .taz 文件。压缩的 tar 文件)。

该文件可以使用 tar -Z 选项或使用 unix compress 实用程序生成(结果相同)

我试图用谷歌搜索一些关于这个文件结构的文档,但是没有关于这个文件结构的文档。

我知道这是 LZW 压缩文件,并以它的幻数“1F 9D”开头,但这就是我能弄清楚的全部。有人请告诉我有关文件头或任何内容的更多详细信息。

我对如何解压缩这个文件不感兴趣,或者什么 linux 命令可以处理这个文件。

我想知道是内部文件结构/标题/格式/布局。先感谢您

0 投票
1 回答
1010 浏览

algorithm - 数组位置/字符串的(这个特定的)异或散列算法的名称

我从这里得到以下 C 代码:

http://marknelson.us/1989/10/01/lzw-data-compression/

它声明它使用 XOR 散列算法来避免必须搜索子字符串数组元素,而是为子字符串生成一个“地址”。

然后是一个散列函数,在我看来,下面的行是主要部分:

  • 这里我们有一个整数值,它从左移 4 位(根据常量的定义)。

  • 然后这个值得到一个与另一个整数值应用的 XOR。

我很确定移位部分只是为了摆脱未使用的位,然后将一个简单的 XOR 操作应用于一个非常短的子字符串,从 12 位到 16 位;尽管我可能对此非常错误。

解释此特定 XOR 散列算法的名称或可能的算法名称列表是什么,或者如果可能的话,是适用于此子字符串应用程序的算法名称列表(如 LZW 子字符串字典等)?





……

……

……