2016-11-17 30 views
0

哪一個使用LibPNG產生最小的9位深度灰度圖像?LibPNG:存儲9位灰度圖像的最小方法

  1. 16位灰度
  2. 8比特灰度級與α,具有存儲作爲阿爾法
  3. 任何其他建議的第9位?

此外,從文檔看起來像8位GRAY_ALPHA,alpha也是8位。是否有可能只有一位阿爾法的8位灰色?

+0

這是關於PNG規範而不是關於libpng的更多問題。 –

回答

0

如果所有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格式。但alpha通道,全是0或255,壓縮得非常好,所以沒什麼好擔心的。請注意,在這個測試案例中(一個簡單的白色到黑色的梯度),32位RGBA文件實際上比「優化」的8位灰度小tRNS

+0

使用比G16稍大的G8A8結束。 tRNS(如果可能)會小得多嗎?還沒有測試過。 –

+0

G8 + tRNS可能更小,但正如我所說的只有0和255的alpha通道壓縮得很好,所以我無法預測哪個會更小。 –

0

哪一個產生最小的9-位深度灰度圖像使用LibPNG?

16位灰度

8比特灰度級與α,具有第9位存儲爲阿爾法

兩種格式的字節的原始佈局非常相似:G2-G1 G2-G1 ...在一種情況下(每個16位值的最高有效字節first),GA GA ...在另一種情況下。由於過濾/預測是在字節級完成的,這意味着兩個備選方案之間很少或根本沒有差異。由於16位灰度在你的場景中更自然,我會選擇它。 如果你走另一條路線,我會建議嘗試在alpha通道上放置最重要的位或最不重要的位。

此外,從文檔中看起來像8位GRAY_ALPHA,alpha也是8位。是否有可能有灰色8位阿爾法的只有一位

不可以,但阿爾法的1位將意味着完全不透明/完全透明的,因此你可以選擇添加TRNS塊申報特殊顏色作爲完全透明(正如在其他答案中指出的那樣,這將禁止使用該顏色)