使用LibPNG生成最小的9位深度灰度图像?
此外,从文档中可以看出,在8位GRAY_ALPHA中,alpha也是8位。有可能只有8位灰色和一位阿尔法吗?
发布于 2016-11-17 15:18:04
如果所有256个可能的灰度都存在(或可能存在),则必须使用16位G8A8像素。但是,如果不存在一个或多个灰度级别,则可以使用该空闲级别来提高透明度,并使用8位索引像素或灰度加上一个tRNS块来标识透明值。
Libpng没有提供一种检查备用级别是否可用的方法,因此您必须在应用程序中这样做。例如,ImageMagick为您做了这样的工作:
$ 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要小。
发布于 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块来声明一个特殊颜色为完全透明(正如其他答案所指出的,这将不允许使用该颜色)。
https://stackoverflow.com/questions/40645574
复制相似问题