2016-11-17 9 views
0

LibPNGを使用して最小の9ビット深度グレースケールイメージを生成するものはどれですか?アルファとLibPNG:9ビットグレースケールイメージを格納するための最小の方法

  1. 16ビットグレースケール
  2. 8ビットグレースケール、アルファ
  3. 任意の他の提案として記憶9番目のビットを有しますか?

また、ドキュメントからは8bit GRAY_ALPHAのように見えますが、アルファは8ビットです。アルファの1ビットだけで8ビットのグレーを持つことは可能ですか?

+0

これは、libpngについてよりもPNG仕様に関する質問です。 –

答えて

0

可能な256階調が存在する(または潜在的に存在する)場合は、16ビットのG8A8ピクセルを使用する必要があります。しかし、1つまたは複数のグレイレベルが存在しない場合は、そのスペアレベルを透過に使用し、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ビットグレースケール+ tRNSよりも小さいことに注意してください。

+0

G8A8を使用して終了しました.G8A8はG16より少し大きめです。 tRNS(可能な場合)ははるかに小さくなるでしょうか?それはまだテストしていない。 –

+0

G8 + tRNSは小さくてもかまいませんが、私が言ったように、0と255だけのアルファチャンネルはかなり圧縮されています。したがって、どれが小さくなるかは予測できません。 –

0

どれが、 LibPNGを使用したビット深度グレースケール画像? 9番目のビットを有するアルファと

16ビットグレースケール

8ビットグレースケールは、アルファ

両方の形式のバイト生レイアウトは非常に似ているように記憶されている:G2-G1とG2-G1 ... 1つのケース(各16ビット値の最上位バイトfirst)では、GA GA ...が他方にあります。フィルタリング/予測はバイトレベルで行われるため、これは2つの選択肢の間にほとんどまたはまったく相違がないことを意味します。あなたのシナリオでは16ビットグレースケールがより自然なので、私はそれを選ぶでしょう。 他のルートを使用する場合は、アルファチャンネルに最上位ビットまたは最下位ビットを配置することを試してみることをお勧めします。

また、ドキュメントからは8bit GRAY_ALPHAのように見えますが、アルファも8ビットです。それはアルファの1ビットだけ

号とグレーの8ビットを持っている。しかし、アルファの1ビットは、したがって、あなたが特別な色を宣言するためにTRNSチャンクを追加するために選ぶことができ、完全に透明/完全に不透明意味するだろうことは可能です(他の答えで指摘されているように、これはその色の使用を禁止します)

関連する問題