3章 その11 RMagickで図を描く

p.42から、Python Imaging Library(PIL)で階層的クラスタをデンドログラムにしてビジュアライズしているので、Rubyでも何とかして絵を描きたい。Processingとか使えれば楽なんだけど。

今回のグラフに必要なのはテキストの配置とラインを引く事だけなので、ImageMagickRubyラッパーであるRMagickをインストールしてテキストとラインの描画方法を調べた。


RMagickをインストールすればImageMagickも入るらしい

sudo gem install rmagick

windowsではrmagick-win32パッケージを使うっぽい?



このへんを参考にした

できた画像
RMagick test




フォントへのパスの設定と、フォントサイズ再設定のためにDrawを新規作成しなければならないのがめんどい。
rmagick-test.rb

#!/opt/local/bin/ruby

require 'rubygems'
require 'RMagick'
include Magick

WIDTH = 240
HEIGHT = 300
canvas = Image.new(WIDTH, HEIGHT)
dr = Draw.new

# 楕円
dr.stroke('red')
dr.stroke_width(3)
dr.fill_opacity(0)
dr.ellipse(120, 150, 80, 120, 0, 270) # x, y, widgh, height, 角度
dr.stroke('green')
dr.ellipse(120, 150, 70, 130, 0, 290) # 少し形変える

# 十字
dr.stroke('purple')
dr.stroke_width(5)
dr.line(0, HEIGHT/2, WIDTH, HEIGHT/2) # 横線
dr.line(WIDTH/2, 0, WIDTH/2, HEIGHT) # 縦線

# 斜線
dr.stroke('blue')
dr.stroke_width(1)
for y in 0...20
  for x in 0...10
    dr.line(x*10, y*10, x*10+10, y*10+10)
  end
end

# テキスト
dr.font = '/Library/Fonts/Arial.ttf'
dr.stroke('transparent')
dr.fill('black')
dr.pointsize = 12 # 文字サイズ
dr.text(180, 140, "Start")

# いったん描画
dr.draw(canvas)

# 文字サイズを変えるために新しいDrawを使う
dr = Draw.new
dr.font = '/Library/Fonts/Arial.ttf'
dr.stroke('transparent')
dr.fill('black')
dr.pointsize = 20 # 文字サイズ
dr.text(130, 50, "End")

# 描画、保存
dr.draw(canvas)
canvas.write('img-result.png')