【发布时间】:2022-01-24 12:14:23
【问题描述】:
我正在尝试使用十六进制编辑器从头开始制作一个简单的 png 图像文件。
高亮区域之前的字节用于 PNG 文件头和 IHDR。这表明我正在尝试制作一个
- 10 x 10 PNG 文件
- 灰度色彩空间
- 1 位深度(二级)
- 放气压缩?
- 自适应过滤?
- 无交错
突出显示的字节是 IDAT 字段未来长度的占位符。
问题:-现在我不确定应该将图像数据放在 IDAT 字段中的什么(或如何?)?
我知道图像的像素值是 MxN 维度的矩阵。显示有点像:
[ (255, 255, 255), (255, 255, 255) ... (255, 255, 255)]
[ (255, 255, 255), (255, 255, 255) ... (255, 255, 255)]
[ (255, 255, 255), (255, 255, 255) ... (255, 255, 255)]
[ (255, 255, 255), (255, 255, 255) ... (255, 255, 255)]
白色 RGB 图像的像素值,其中左上的元组是(0, 0) 的像素的颜色值,右下是(m-1, n-1) 的颜色值。
现在我应该如何将其编码到 IDAT 标头的数据结构中? 我想知道的是如何将上面的值(像素值)转换为 deflate 块?
P.S.:- 我对 Deflate 的工作原理或 png 文件中使用的过滤算法不太了解。我已经阅读了 PNG 文件的 RFC 2083 和 Wikipedia 页面。我还阅读了有关堆栈交换的所有相关答案。
【问题讨论】:
-
RF 2083 仅定义了放气压缩,没有其他替代方法。您必须使用它,或者确定是否发布了允许更简单压缩(或没有)的修订。
-
@ChristophRackwitz 我不反对 Deflate 压缩。我要问的是压缩和过滤如何处理像素数据(像素值矩阵)?
-
如果这是您的问题,请在问题中提出。
-
试试
gzip -8 my_pixels.bin -c > my_pixels_compressed.bin是否可以压缩以上来源生成的字节流。在我阅读的源代码中,您可以使用zlib来压缩gzip使用的IDAT 流。不是解决方案,而是解决方案的潜在路径。
标签: image file image-processing png