Rmagickで2次元配列から画像生成
2次元配列の画像生成は基本では?
2次元配列から画像にするのは、ごく基本的な画像処理作業である。
ところが、Rmagickでどうするか?日本語の説明文が出てこない。
rmagickのTextから変換する等、カッタるい方法の紹介はあるのに。
私自身も、これまでrmagickを用いず、bmpの生成、rmagickで変換というカッタるいことをしていた。
rmagickに機能が無いわけはない。英語の説明は充実しており、調べてみよう。
配列から画像の直接のメソッドは?
調べてみたが、配列から画像に変換するようなメソッドは見当たらない?(rmagick4.0.0)
でも、ピクセル単位で変換は、 img.pixel_color(x,y,colors)でできるようだ。
サンプルコード
例えば、下記のような配列状のテキストデータから画像に変換しようと思えば、
000000000000000000000000000000000000344444444322222344444444444444444444
000000000000000000000000000000000000344444444433222233444444444444444444
000000000000000000000000000000000000344444444444322222344444444444444444
000000000000000000000000000000000000344444444444322222344444444444444444
000000000000000000000000000000222333333444444444422222234444444444444444
000000000000000000000000000000222333333444444444422222234444444444444444
000000000000000000000000000002222233333444444444433222224444444444444444
000000000000000000000000000002222233333444444444444211123344444444444444
000000000000000000000000000002222233333444444444444211123344444444444444
000000000000000000000000000002222233333444444444444222112223344444444444
000000000000000000000000000002222333333444444444444000000012234444444444
000000000000000000000000000002333333344444444444444000000002234444444444
000000000000000000000000000002333333344444444444444000000002234444444444
000000000000000000000000000002333333344444444444444000000002244444444444
000000000000000000000000000002333344444444444444444000000000034444444444
000000000000000000000000000003334444433344444444433000000000024444444444
次のようなコードで画像生成できる。
require "rmagick"
nfi=ARGV[0]
nfo=nfi.sub(/\.txt$/,".png")
hs=IO.readlines(nfi)
ni=hs.size;nj=hs.map{|l| l.size}.max
unit=50*2**8
colors=[0,1,2,3,4,5].map{|i| Magick::Pixel.new(i*unit,i*unit,i*unit,0)}
img=Magick::Image.new(nj,ni)
ni.times{|i| nj.times{|j| img.pixel_color(j,i,colors[h=hs[i][j].to_i]) } }
img.write(nfo)
それほど早くはないが、おそらく、テキストから変換するconvertよりは早いだろう。