2009年05月27日

RMagickを使ってみる

ImageMagick(語尾のkを忘れて検索したら、間違っていると気づかせない程度に結果が出てきて悩んだ)を入れて、文字の画像化をしてみる。

「あ」

ここに表示している「あ」という文字は画像ではなくテキストであり、文字コードの何番目とかでしかない。プログラムはそれをコードとしては捉えられるけど、形として捉えてはいない。

だからプログラムは片仮名の「ヘ」と平仮名の「へ」を全く違うものとして捉える。けど、画像化して類似画像を検索すれば似たものとして捉えられる。うちの子にはそういう目線で文字を見て欲しい。親である私の希望である。

というわけで、受け取った文字列をその場で画像に変換して、その場で見て、何に近いか連想してもらうという実に意味のないことを考える。

とりあえず画像にするとこまで。Ruby経由なのでRMagick使用。

宗教的理由でprefixを指定しているけど、実際には特に必要ない。むしろ付けない方がいい。

$ ./configure --prefix=/usr/local/ImageMagick
$ make
$ make install

いろいろ警告が出てた気がするけど、注意して見てなかったから分からない。とりあえず動いたからよしとする。ログってなんですか。


次にRubyからImageMagickを触る為に、RMagickを入れる。

$ gem install rmagick

失敗。

先ほど宗教的理由でImageMagickのインストールディレクトリをいじってしまったせいで、Magick-configがないと言われる。仕方ないのでPATHを追加してみる。

$ PATH=$PATH:/usr/local/ImageMagick/bin
$ export PATH

これで再度gemったら通った。

ついでにこのままRMagickを実行すると、またも宗教的な事情が原因でlibMagickCore.soがないとか言われるので、LD_LIBRARY_PATHにも足しておく。宗教万歳。

$ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/ImageMagick/lib
$ export LD_LIBRARY_PATH


指定文字を画像にするスクリプトを書いてみる。下準備として、300*300の真っ白な画像を用意し、blank.bmpと名づける。

require 'rubygems'
require 'RMagick'

blankImg = Magick::ImageList.new("blank.bmp")
draw = Magick::Draw.new
draw.annotate(blankImg, 0, 0, 55, 250, "A") {
  self.fill = "black"
  self.pointsize = 300
  self.font = 適当なフォント
}
blankImg.write("new.bmp")


これで「A」という文字を画像に変換できた。が、「A」を「あ」に変えて実行すると文字化けした。どうやらフォントはフルパスで指定した方が良いらしい。

Fedora10の日本語フォントの場所どこだろうと思いつつ、探すより落とした方が早そうだったので、とりあえずさざなみさんを落としてttfファイルをスクリプトと同一ディレクトリに放り込んだら動いた。結果オーライ。