
24ビットトゥルーカラー形式の画像(RGB画像とも呼ばれる)を使用するPNG画像処理ワークフローがあります。 PNG は RGB またはインデックスの色表現を受け入れます。
NetPBM のプログラムは、pnmtopng
イメージのさまざまな色の数に基づいて作成するイメージのタイプを自動的に決定します。この数字が256以下の場合、自動的にインデックスイメージを使うという内容をどこかで読んだ記憶が出ます。
画像の種類を保存する方法はありますか?
たとえば、次のようにNetPBMを使用して画像を反転すると、
pngtopnm true-color-image.png | pamflip -tb | pnmtopng > new-image.png
新しい画像も真のカラー画像であるかどうかを確認する方法はありますか?
現在の画像サイズが元の画像よりも50%小さく、誤ったタイプであることを確認できます。
37155 true-color-image.png
27463 new-image.png
新しい画像のサイズが元の画像とほぼ同じであることを望みます。
identify
ImageMagickはまた、これら2つの画像について次の情報を提供します。
true-color-image.png PNG 300x280 300x280+0+0 8-bit sRGB 37155B
new-image.png PNG 300x280 300x280+0+0 8-bit sRGB 61c 27463B
答え1
解決策が見つかりましたPNG:最終ガイド(5枚)著者:グレッグ・ロエロフス
それは言う:
注意深い読者であれば、GIF画像は常にパレットベースであることを覚えています。ただし、NetPBM形式を説明するときにパレットについては言及していません。実際、NetPBMにはパレットの概念はありません。 Giftopnmは通常、GIF画像をPPM形式(RGBスタイル)に変換します。幸いにも、pnmtopngは画像の色を計算するのに十分スマートで、色数が256個以下のときに自動的にパレットベースのPNG画像を作成します。また、カラー画像が実際にグレースケール値でのみ構成されているかどうかも検出します。この場合、最も少ないビットで書くことができる値に応じて、グレースケールPNGまたはパレットベースのPNGを書き込みます。ただし、この自動検査には費用がかかります。すべてのピクセルを調べる必要があるため、大きな画像の場合は非常に遅くなります。したがって、pnmtopngには次のものが含まれます。-力スキャンをスキップするオプションです。
したがって、オプションを導入する主な目的は、-force
変換を高速化することです。私の場合は、互換性を確保するのに役立ちます。
pngtopnm true-color-image.png | pamflip -tb | pnmtopng > flipped-indexed.png
pngtopnm true-color-image.png | pamflip -tb | pnmtopng -force > flipped-truecolor.png
実行すると、identify
オプションが期待どおりに機能することが確認されます。
flipped-indexed.png PNG 300x280 300x280+0+0 8-bit sRGB 61c 27463B 0.000u 0:00.000
flipped-truecolor.png PNG 300x280 300x280+0+0 8-bit sRGB 37038B 0.000u 0:00.000
完全性のために、ここに完全な例があります。
# 1. Generate a green/blue two color image
ppmrough -left 30 -right 30 -top 30 -bottom 30 -width 300 -height 280 \
-var 5 -bg green -fg blue > twocolor.ppm
# 2. Convert to PNG
pnmtopng twocolor.ppm > twocolor-indexed.png
# 3. Convert to PNG forcing Truecolor output
pnmtopng -force twocolor.ppm > twocolor-truecolor.png
# 4. Checking the results
identify twocolor-indexed.png twocolor-truecolor.png
これにより、2つのPNG画像が生成されます。 1つは2色のインデックスパレット、もう1つはトゥルーカラーPNGです。
twocolor-indexed.png PNG 300x280 300x280+0+0 8-bit sRGB 2c 1018B 0.000u 0:00.000
twocolor-truecolor.png PNG 300x280 300x280+0+0 8-bit sRGB 2421B 0.000u 0:00.000
答え2
これは私にとってXYの問題のようです。
png は、情報の内容を減らしたり変更したりすることなく、できるだけ小さな方法で画像を保存するように設計された圧縮画像形式です。画像の色が256個以下の場合は、RGBデータを失うことなくインデックスとして保存できます。
アプリケーションが適切なライブラリを使用してイメージを読み取る場合、その形式がインデックス形式であるかトゥルーカラー形式であるかは重要ではありません。いずれにしても、画像のピクセルに対して同じ生データを取得する必要があります。手書きのpngデコーダがインデックス画像を処理できない場合は、ライブラリに切り替えることをお勧めします。
未インデックスの生のRGB画像が本当に必要な場合は、pngの代わりにppmに変換する必要があります。