NetPBMを使用して変換するときにPNG画像タイプ(RGBまたはインデックス)を維持する方法は?

NetPBMを使用して変換するときにPNG画像タイプ(RGBまたはインデックス)を維持する方法は?

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

新しい画像のサイズが元の画像とほぼ同じであることを望みます。

identifyImageMagickはまた、これら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

おすすめ記事