RubyでPPM出力のメモ
Rubyで簡単な画像を作る機会があったのでそのときのメモ。CとかJavaでのPPMファイルの作り方のドキュメントはウェブ上にたくさんあるのでそちらも参考に。PPMについては「http://en.wikipedia.org/wiki/Portable_pixmap」を参照。気づかなかったけど、Windowsでは標準でPPMを開くことはできないみたい。
PPMファイルには以下のようにP1からP6まであるようだ。というか、PPMと呼ぶのはカラーのP3とP6で、P1とP4はPBM、P2とP5はPGMと呼ぶ方が正しいのかもしれない。
P1 | 白黒2値・アスキー |
P2 | モノクロ・アスキー |
P3 | RGBカラー・アスキー |
P4 | 白黒2値・バイナリ |
P5 | モノクロ・バイナリ |
P6 | RGBカラー・バイナリ |
アスキー形式で出す方が手軽だけど、ファイルサイズは大きくなる。本当はP4形式でことたりたのだけど、Rubyでビット単位で出力する方法がいまいち分からなかったので、P5で出力することにした。
#!/usr/bin/ruby #p5.rb width = 256 height = 256 puts "P5" puts "#{width} #{height}" puts "255" i=0 while i<height do j=0 while j<width do g = (i+j) % 256 printf("%c",g) j+=1 end i+=1 end
標準出力に出力してるので、リダイレクトでこんな感じ。
ruby p5.rb > p5.ppm
ついでにカラーのP6形式。
#!/usr/bin/ruby #p6.rb width = 256 height = 256 puts "P6" puts "#{width} #{height}" puts "255" i=0 while i<height do j=0 while j<width do r = i % 256 g = j % 256 b = (i+j) % 256 printf("%c%c%c",r,g,b) j+=1 end i+=1 end