アインシュタインの電話番号
2011.04.13
RMagickでフォント名を指定して文字列を描画する

RMagickで、何も無い状態からベースとなる画像を生成し、その上にフォント名を指定した文字列を描画する方法について調べた。ActionScript 3.0で例えると、RMagickのDrawクラスがBitmapDataクラス相当、RMagickのImageクラスがBitmapクラス相当になるかな。

annotateメソッド

Image.newで、ベースとなる画像サイズおよび背景色を指定し、Imageオブジェクトを生成する。Draw.newで、描画用のDrawオブジェクトを生成し、Draw#annotateメソッドでフォント名や各種属性を指定して文字列を描画する。annotateの中で使える属性で、font_weightプロパティは何を指定しても変化がなかったんだけど、何か特別なことをしないといけないのかな? とりあえず下記のように、フォント名に「Verdana」ではなく「Verdana-Bold」を指定して太字にした。でもウェイト指定したいよね…教えて偉い人。

require 'rubygems'
require 'RMagick'
text = 'Hello, World'
size = 30
img = Magick::Image.new(400, 300) { self.background_color = '#336699' }
draw = Magick::Draw.new
draw.annotate(img, 0, 0, 50, 100 + size, text) do
  self.font = 'Verdana-Bold'
  self.fill = '#FFFFFF'
  self.align = Magick::LeftAlign
  self.stroke = 'transparent'
  self.pointsize = 30
  self.text_antialias = true
  self.kerning = 1
end
img.write('temp.png')

RMagick 2.12.0: class Draw