问题标签 [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.
dictionary - 文本上的 LZW 压缩
如何改进 LZW 输出序列以实现更高的压缩率?有没有具体的方法?(我正在对文本文件应用 LZW 压缩)
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”
我将尝试重做工作,看看我是否得到不同的答案
compression - 谁能推荐一种无损压缩算法来压缩 x 和 y 坐标?
我需要一些关于压缩算法的建议来压缩 x 和 y 数据坐标。我在 Matlab 中编码。我一直在做很多研究,遇到了 Huffman Coding、LZW、Delta 等。我可以从 Huffman 得出的结论是,数据需要在编码之前按字母顺序排序?这对我来说可能没用,因为它只适用于 x 坐标?或者有没有办法解决这个问题?任何建议将不胜感激。谢谢
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 文件中的其他地方可能会表明这一点吗?非常感谢。~
python-2.7 - 压缩何时会增加文件大小?
我有一个大文本文件,主要由数字和一些分隔符等组成,|{}[]:
。我使用 Lempel-Ziv 编码进行压缩。我使用的代码不是我的,而是来自Rosetta代码的代码。我运行了逐行压缩的代码以及逐块压缩的代码:
这两个函数都输出一个比原始文件大得多的文件!!解压工作正常,即我能够取回原始文本,所以我认为代码是正确的。
我在保存文件时做错了什么?
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 有更简单的解决方案,但我必须使用它们,而且函数的类型也不能修改。
你能帮我解决我在这里做错了什么吗?
algorithm - LZW-解压缩算法
我很难理解 LZW 算法。我正在检查维基百科(http://en.wikipedia.org/w/index.php?title=Lempel-Ziv-Welch&oldid=245292660)上提供的伪代码,解压器代码中有一部分我不明白:
有人可以向我解释会发生这种情况的情况吗?
c - 如何为 LZW 压缩构建树?
谁能告诉我如何在c中为LZW压缩构建一棵树?是不是类似于 struct tree{ short next[255]; }
c - LZW中的压缩问题
我在实现 LZW 的压缩器时遇到了麻烦。压缩器似乎工作正常,但是在处理一些流时它没有结束流字符(使用值 256 定义),结果是解压缩器将无限循环。压缩机代码如下:
CODE
和SYMBOL
分别属于typedef
和uint32_t
,uint16_t
定义FIRST_CODE
为 257。该函数dictionary_init()
简单地初始化字典,返回父节点“ ”(如果存在)dictionary_lookup()
的具有符号“”的子节点的索引。character
current_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。
解决方案:检查缓冲区中是否有足够的空间用于我要编写的整个编码符号。只是改变:
至:
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 字符,或者我应该尝试其他压缩方法?如果有,有哪些?
编辑
通过从开始更改循环
至
我可以让算法工作,但该解决方案需要太多的计算时间和内存。