问题标签 [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 投票
2 回答
1002 浏览

dictionary - 文本上的 LZW 压缩

如何改进 LZW 输出序列以实现更高的压缩率?有没有具体的方法?(我正在对文本文件应用 LZW 压缩)

0 投票
1 回答
1169 浏览

c++ - LZW 编码和 GIF 文件格式

我试图了解如何.gif在 C++ 中创建文件。LZW到目前为止,我认为除了编码的工作原理之外,我什么都懂。这是我用标签生成的文件:

这里再次没有用于复制/粘贴目的的标签:47 49 46 38 39 61 05 00 04 00 91 00 00 00 FF 00 FF 00 00 FF FF 00 00 00 00 21 F9 04 00 00 00 00 00 2C 00 00 00 00 0A 00 01 00 00 02 04 8A 05 00 3B

我在理解如何02 04 8A 05转换为图像时遇到了很多麻烦yryryggyry。我知道02是最小代码大小,04是图像块的长度,我想我已经确定了清晰和EOI代码,但我不明白中间的代码。

到目前为止,我从.gif规范中获得了最多的信息:http: //www.w3.org/Graphics/GIF/spec-gif89a.txt

这个网站也很有帮助: http: //www.matthewflickinger.com/lab/whatsinagif/lzw_image_data.asp

谢谢

编辑*

我观看了评论中链接的 Youtube 视频,并为颜色流“yryryggyry”手动编码了图像:

我一定犯了一个错误,因为这段代码产生的图像是“yr”而不是“yryryggyry”

我将尝试重做工作,看看我是否得到不同的答案

0 投票
1 回答
55 浏览

compression - 谁能推荐一种无损压缩算法来压缩 x 和 y 坐标?

我需要一些关于压缩算法的建议来压缩 x 和 y 数据坐标。我在 Matlab 中编码。我一直在做很多研究,遇到了 Huffman Coding、LZW、Delta 等。我可以从 Huffman 得出的结论是,数据需要在编码之前按字母顺序排序?这对我来说可能没用,因为它只适用于 x 坐标?或者有没有办法解决这个问题?任何建议将不胜感激。谢谢

0 投票
1 回答
197 浏览

tiff - LZW 解压:为什么在 TIFF 条带中遇到的第一个字典代码是 261 而不是 257,还是我误读了它?

我有一个在 Photoshop 中保存为 TIFF 的简单 RGB 文件,大约 1000 像素宽。第一行由 3 个像素组成,所有像素均为 16 进制 4B 红色、B0 绿色、78 蓝色,其余为白色。

条带是 LZW 编码的,条带的初始字节是:

80 12 D6 07 80 04 16 0C B4 27 A1 E0 D0 B8 64 36 ...(实际上只有前 7 个左右的字节对我的问题很重要。)

在 9 位段中,这是:

据我了解,256 (0x100) 是一个重置代码,但为什么 261 (0x105) 之后的第一个扩展代码是 257 而不是 257?我希望这指向的任何字典条目都是第二个像素的 4B/B0 对(很可能是),但是解压缩算法如何知道将 4B/B0 放置在 261 而不是 257?有人可以解释我在这里缺少什么吗?.tif 文件中的其他地方可能会表明这一点吗?非常感谢。~

0 投票
2 回答
1545 浏览

python-2.7 - 压缩何时会增加文件大小?

我有一个大文本文件,主要由数字和一些分隔符等组成,|{}[]:。我使用 Lempel-Ziv 编码进行压缩。我使用的代码不是我的,而是来自Rosetta代码的代码。我运行了逐行压缩的代码以及逐块压缩的代码:

这两个函数都输出一个比原始文件大得多的文件!!解压工作正常,即我能够取回原始文本,所以我认为代码是正确的。

我在保存文件时做错了什么?

0 投票
2 回答
176 浏览

haskell - Haskell 中的 LZW 例程使用 Monads

我正在尝试使用 Monads 在 Haskell 中实现 LZW 压缩,这是迄今为止我的代码与测试用例:

使用此代码,我收到以下错误(指使用 put in "encode" 和 "decode" 函数):

Main.hs@80:13-80:16 没有使用 put 引起的 (MonadState () (StateT Dictionary Data.Functor.Identity.Identity)) 的实例

我试图定义这个实例,但我能做到的最好的是“实例声明之间的功能依赖冲突”错误。我知道没有 Monads 有更简单的解决方案,但我必须使用它们,而且函数的类型也不能修改。

你能帮我解决我在这里做错了什么吗?

0 投票
1 回答
1998 浏览

algorithm - LZW-解压缩算法

我很难理解 LZW 算法。我正在检查维基百科(http://en.wikipedia.org/w/index.php?title=Lempel-Ziv-Welch&oldid=245292660)上提供的伪代码,解压器代码中有一部分我不明白:

有人可以向我解释会发生这种情况的情况吗?

0 投票
1 回答
596 浏览

c - 如何为 LZW 压缩构建树?

谁能告诉我如何在c中为LZW压缩构建一棵树?是不是类似于 struct tree{ short next[255]; }

0 投票
0 回答
141 浏览

c - LZW中的压缩问题

我在实现 LZW 的压缩器时遇到了麻烦。压缩器似乎工作正常,但是在处理一些流时它没有结束流字符(使用值 256 定义),结果是解压缩器将无限循环。压缩机代码如下:

CODESYMBOL分别属于typedefuint32_t,uint16_t定义FIRST_CODE为 257。该函数dictionary_init()简单地初始化字典,返回父节点“ ”(如果存在)dictionary_lookup()的具有符号“”的子节点的索引。charactercurrent_node

二进制文件的写入定义为:

我已经使用另一个函数打开了文件,因此将指向结构bit_write的指针作为输入。bf有人可以帮我找出错误吗?

出现此问题的示例如下:

如果输入字符串是“ Nel mezzo del cammi ”,一切正常,我有以下压缩文件(十六进制,使用 12 位编码符号):

4E 50 06 6C 00 02 6D 50 06 7A A0 07 6F 00 02 64
20 10 20 30 06 61 D0 06 6D 90 06 0D A0 00 00 01

如果我在字符串中添加另一个字符,特别是“ Nel mezzo del cammin ”,我会得到以下结果:

4E 50 06 6C 00 02 6D 50 06 7A A0 07 6F 00 02 64
20 10 20 30 06 61 D0 06 6D 90 06 6E D0 00 0A 00
10

在第二种情况下,它没有正确写入 End of Stream。

解决方案:检查缓冲区中是否有足够的空间用于我要编写的整个编码符号。只是改变:

至:

0 投票
0 回答
544 浏览

swift - 压缩 unicode 字符串

我正在寻找一种在 Swift 中压缩 Unicode 字符串的算法。我将压缩的字符串相对较小(不超过 160 个字符)。

我发现这里已经实现了 LZW 压缩。我复制粘贴了适用于 ASCII 字符的代码,但是一旦我添加了一些 Unicode 字符,我就fatal error: unexpectedly found nil while unwrapping an Optional value压缩了一段时间,result.append(dict[w]!)我的猜测是该算法不支持 unicode 字符,因为dict[c]对于任何 Unicode 字符都是未定义的c

如何调整该算法以支持 Unicode 字符,或者我应该尝试其他压缩方法?如果有,有哪些?

编辑

通过从开始更改循环

我可以让算法工作,但该解决方案需要太多的计算时间和内存。