■
[RMagick]RMagick のフォント指定
RMagick の RVG(ベクターグラフィックス)を使って描画を試していたが、フォントファイルを絶対パスで指定するところでつまづいてしまった。
やりたいことは以下のようなことだ。
require 'rvg/rvg' include Magick RVG::dpi = 200 rvg = RVG.new(2.00.in, 3.00.in).viewbox(0, 0, 200, 300) do |canvas| canvas.text(10, 20, "Hello World").styles(:font=>"/myfont_dir/font1.ttf", :font_size => 12) end
上のコードを実行すると、
Magick::ImageMagickError: Non-conforming drawing primitive definition `.'
という意味不明なエラーメッセージが表示される。
いろいろ調べたところ、結論から言うとこれは RMagick のバグである。 (私の RMagick は v 1.51 であった)
オープンクラスを使って RMagick のコードを修正してやれば OK。フォントを使うまえに、以下のコードを実行する。
module Magick class Draw # Specify text drawing font def font(name) primitive "font '#{name}'" end end end
オリジナルでは、primitive "font #{name}" となっていた。やれやれ。引用記号がなかったために、引数がコマンドの展開の影響を受けてしまい、エラーとなっていた模様である。