このエントリー
をはてなブックマークに追加
published on in Graphics
tags: PNM ImageMagick PBM PGM PPM

PNM と ImageMagick で画像ファイルを手作り生成

PNM と ImageMagick で画像ファイルを手作り生成

何らかの画像実験で都合の良い画像ファイルが欲しい時にテキストエディタで作れると便利で、PNM (Portable aNyMap) フォーマットを利用するとそんな事が簡単に出来ます。

PNM とは

古くからある画像フォーマット群で ASCII テキストでもバイナリでも表現出来るのが大きな特徴です、尚、圧縮はいたしません。

PNM は 以下の3つのフォーマットをまとめた呼び方です。

拡張フォーマット

PNM ファミリーではない為に今回は解説しませんが、以下の拡張フォーマットがあります。PAM は透明度が表現できます。PFM は float(浮動小数点)表現です。

フォーマット概要

ファイル先頭の文字列に応じて、以下のフォーマットに分かれます。(尚、PAM形式は P7 で、PFM形式は PF, Pf です)

ファイル先頭 フォーマット データ表現 画像表現
P1 PBM ASCII 白黒画像
P2 PGM ASCII グレー画像
P3 PPM ASCII カラー画像
P4 PBM Binary 白黒画像
P5 PGM Binary グレー画像
P6 PPM Binary カラー画像
P7 PAM Binary アルファ付きカラー画像
Pf PFM Binary 浮動小数点形式グレースケール画像
PF PFM Binary 浮動小数点形式カラー画像

データ表現が ASCII の場合は以下のフォーマットをとります。

フォーマット種別 # P1〜P6のいずれか。
横サイズ 縦サイズ
最大値             # P1 の時は1固定なので省略
画像データの並び
.....

PBM (portable bitmap format)

画像の白黒を 0,1 で表現します。(0:白、1:黒である事に注意)

  • batsu.pbm
P1
7 7
P1
7 7
1 0 0 0 0 0 1
0 1 0 0 0 1 0
0 0 1 0 1 0 0
0 0 0 1 0 0 0
0 0 1 0 1 0 0
0 1 0 0 0 1 0
1 0 0 0 0 0 1

ImageMagick の convert で変換します。ついでに8倍に拡大したものも。

$ convert batsu.pbm batsu.png
$ convert -resize 800% -filter point batsu.png batsu_8.png
8倍に ↓ 拡大

PGM (portable graymap format)

白と黒の間で濃淡をつけられます。いわゆるグレー画像です。4段階で作ってみます。

  • batsu_gray.pgm
P2
7 7
4
4 0 0 0 0 0 4
0 3 0 0 0 3 0
0 0 2 0 2 0 0
0 0 0 1 0 0 0
0 0 2 0 2 0 0
0 3 0 0 0 3 0
4 0 0 0 0 0 4

convert で変換 & 8倍画像

$ convert batsu_gray.pgm batsu_gray.png
$ convert -resize 800% -filter point batsu_gray.png batsu_gray_8.png
8倍に ↓ 拡大

PPM (portable pixmap format)

RGB でカラーを表現できます。以下のも4段階です。ちなみに、256 段階を指定すると皆さんお馴染みの RGB 表現になります。

  • batsu_rgb.ppm
P3
7 7
4
4 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 4
0 0 0  3 0 0  0 0 0  0 0 0  0 0 0  0 0 3  0 0 0
0 0 0  0 0 0  2 0 0  0 0 0  0 0 3  0 0 0  0 0 0
0 0 0  0 0 0  0 0 0  1 1 1  0 0 0  0 0 0  0 0 0
0 0 0  0 0 0  0 2 0  0 0 0  2 2 0  0 0 0  0 0 0
0 0 0  0 3 0  0 0 0  0 0 0  0 0 0  3 3 0  0 0 0
0 4 0  0 0 0  0 0 0  0 0 0  0 0 0  0 0 0  4 4 0

convert で変換

$ convert batsu_rgb.ppm batsu_rgb.png
$ convert -resize 800% -filter point batsu_rgb.png batsu_rgb_8.png
8倍に ↓ 拡大

さいごに

エディタで任意のビットマップ画像を作りたい時にご活用下さい。たまに便利です。

参考 URL