【问题标题】:How to convert a zlib stream to PNG? [closed]如何将 zlib 流转换为 PNG? [关闭]
【发布时间】:2018-10-11 16:34:08
【问题描述】:

我已经有一个 zlib 编码的图像数据流(取自 PDF /FlateDecode 标签)。我还得到了像素的宽度和高度以及颜色深度(8 bpp)。数据是打包的 RGB。 现在我想将它保存为 PNG 图像(我认为默认的压缩方法也是 ZLIB 吗?)。 我尝试手动添加 PNG 标头和 IDAT 标头,但没有奏效。 有谁知道,如何正确地做到这一点? (libpng ?)

目标系统的 RAM 资源非常有限,因此无法解码 zlib 数据并使用 libpng 重新编码。

【问题讨论】:

  • 图片数据是什么格式的?
  • 图像数据是 zlib 编码的打包 rgb 数据。 (“原始”)
  • 如果你问你应该使用什么库和它的功能,那么这是题外话。如果您要问如何推出自己的实现,那么这太宽泛了。还有 “但它没有用。” 对错误的描述是非常不充分的
  • @PasserBy 这个问题对我来说似乎很好,问题是明确地关于在 没有 库的情况下进行操作,我弄清楚了正在尝试什么以及错误是什么.一个问题是否清楚显然是旁观者的眼睛。
  • @MarkAdler:如果 OP 共享了他们代码的相关部分,那么我们很有可能知道它的问题所在。事实上,这个问题归结为“我有代码但它不起作用,请写一些。”

标签: c++ c png zlib libpng


【解决方案1】:

您需要解压缩,将数据重新格式化为 PNG,然后重新压缩。在 PNG 文件中压缩的图像数据不仅仅是原始 RGB 数据。根据the specification,图像的每一行前面都有一个过滤字节,该字节指定该行与先前数据的区别(或不区别)。即使你不做差分,你也需要那个字节来说明。但是,使用其中一种过滤模式可以获得更好的压缩效果。

【讨论】:

  • 谢谢马克,我明白了。我现在要逐块膨胀并用 libpng 重新压缩。
猜你喜欢
  • 2011-08-31
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 2020-05-16
  • 2010-09-08
  • 2014-01-05
  • 2021-01-10
  • 1970-01-01
相关资源
最近更新 更多