首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LibPNG:存储9位灰度图像的最小方法

LibPNG:存储9位灰度图像的最小方法
EN

Stack Overflow用户
提问于 2016-11-17 02:08:22
回答 2查看 265关注 0票数 0

使用LibPNG生成最小的9位深度灰度图像?

  1. 16位灰度
  2. 带有alpha的8位GrayScale,将第9位存储为alpha
  3. 还有其他建议吗?

此外,从文档中可以看出,在8位GRAY_ALPHA中,alpha也是8位。有可能只有8位灰色和一位阿尔法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-17 15:18:04

如果所有256个可能的灰度都存在(或可能存在),则必须使用16位G8A8像素。但是,如果不存在一个或多个灰度级别,则可以使用该空闲级别来提高透明度,并使用8位索引像素或灰度加上一个tRNS块来标识透明值。

Libpng没有提供一种检查备用级别是否可用的方法,因此您必须在应用程序中这样做。例如,ImageMagick为您做了这样的工作:

代码语言:javascript
复制
$ pngcheck -v rgba32.png im_opt.png
File: rgba32.png (178 bytes)
  chunk IHDR at offset 0x0000c, length 13
    64 x 64 image, 32-bit RGB+alpha, non-interlaced
  chunk IDAT at offset 0x00025, length 121
    zlib: deflated, 32K window, maximum compression
  chunk IEND at offset 0x000aa, length 0

$ magick rgba32.png im_optimized.png

$ pngcheck -v im_optimized.png
  File: im_optimized.png (260 bytes)
  chunk IHDR at offset 0x0000c, length 13
    64 x 64 image, 8-bit grayscale, non-interlaced
  chunk tRNS at offset 0x00025, length 2
    gray = 0x00ff
  chunk IDAT at offset 0x00033, length 189
    zlib: deflated, 8K window, maximum compression
  chunk IEND at offset 0x000fc, length 0

在PNG规范中没有定义G8A1格式。但是阿尔法通道,都是0或255,压缩得很好,所以没什么好担心的。请注意,在这个测试用例中(一个简单的白色到黑色梯度),32位RGBA文件实际上比“优化”的8位grayscale+tRNS要小。

票数 1
EN

Stack Overflow用户

发布于 2016-12-09 21:18:49

使用LibPNG生成最小的9位深度灰度图像? 16位灰度 带有alpha的8位GrayScale,将第9位存储为alpha

两种格式的字节原始布局非常相似: G2-G1 - G2-G1 .在一种情况下(每个16位值first中最重要的字节),G.在另一个。因为过滤/预测是在字节级别进行的,这意味着两个备选方案之间的差异很小或没有任何差别。因为16位灰度在你的场景中更自然,我会选择它。如果你走另一条路,我建议把最重要的或最不重要的比特放到阿尔法通道上。

此外,从文档中可以看出,在8位GRAY_ALPHA中,alpha也是8位。有可能只有8位灰色和一位阿尔法

不是的。但是1位alpha就意味着完全不透明/完全透明,因此您可以选择添加一个TRNS块来声明一个特殊颜色为完全透明(正如其他答案所指出的,这将不允许使用该颜色)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40645574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档