3

我在互联网上看到过zliblzo等数据压缩库。但我不确定压缩 40,000 字节的最佳方法(它们在byte[][](x,y = color)一个最多秒。

我不确定这是否可能以及最好的选择是什么。我还需要输出的byte[]含义是我需要丢失数组的第二维,并在解压缩发生时能够再次获得它。我不想将任何数据保存到文件中,因为我将把它发送给客户端,而当我发送数据时,我只需要给它一个byte[],它会完成所有其余的工作。(我无法更改向客户端发送数据的方法。)感谢您的帮助。

编辑:我不介意我是否丢失数据,只要该数据每次发送时都会发送相同的数据,因为每 1/4 秒就会发送一次带有新信息的更新,我不会发送图像所以你所说的关于 png dossent 的内容真的很有帮助,因为我正在制作服务器程序上的颜色(不是从文件中读取)。希望这可以帮助。

4

3 回答 3

2

从根本上说,没有通用的压缩方案可以以无损方式对任意数据的每个输入实现显着压缩。您可以忍受获得比开始时更多的数据的可能性,或者数据丢失......这是您的选择。不过,试图将数据降低到原始数据的 1/20 通常是一项艰巨的任务。

鉴于这是图像数据,您可能不应该查看通用压缩例程 - 而是查看图像格式,例如 JPEG、PNG 等。除此之外,某些图像格式具有“质量”选项,可让您以降低保真度为代价实现更大的压缩。不过,200 字节真的不是很多信息......

在您关注事物的性能方面之前,我会专注于获得可行的结果(足够小,但质量足够好)。当你有一些东西在工作时,你可以看到它是否足够快——但是如果它不符合你的初始要求,那么努力让它变得更快是没有意义的。

如果您使用基于图像的压缩,则事物的 1D/2D 方面可能会丢失。如果您采用某种自定义方案,则很容易存储一个维度的长度并推断另一个维度。这基本上是您的要求中问题最少的部分:)

于 2012-12-30T10:37:01.643 回答
1

您不能总是在不丢失数据的情况下将 40000 字节压缩到 200 字节。但是,如果您的数据是计算机生成的颜色很少的图像,则生成 200 字节或更少字节的可能性不大:

1) 将数据提供给 PNG 压缩库。

最好的压缩需要一些时间,但您可以通过稍微牺牲压缩级别来节省大量时间。如果您的库是 OptiPNG,那么 2 或 3 级可能是速度和压缩之间的良好平衡。

2)由于您知道图像大小,因此删除标题和所有其他可以在接收端恢复的块。你应该剩下的就是IDAT块。即便如此,您也可以从中剥离前几位(块头)。

解压时:

1) 预先IHDR添加块(预先知道)和(如果您使用调色板)PLTE块(也预先知道)和IDAT块的标题。附加IEND块。

2) 将此数据提供给 PNG 解压缩库。

文件格式有.png据可查。您可以使用维基百科作为您的起点。

于 2012-12-30T10:52:39.733 回答
0

要检查您尝试做的事情在理论上是否可行,请获取一个或多个输入图像样本并计算该数据的(或“香农熵”)。这将至少估计您的数据中实际包含多少信息(熵)。

如果一个输入图像中的熵计算到超过 200*8 位,则可能没有通用的无损压缩方案可以对单个图像进行所需的压缩。

但是,如果您有一系列图像,您可能只对从一个图像到下一个图像的差异进行编码,并平均实现您的目标带宽;例如常见的视频编解码器。

也许还可以阅读“源代码”

于 2012-12-30T14:31:59.357 回答