Posted at

漢字を画像として出力【Ruby/Cairo 編】

Python と OpenCV を使って漢字一字の画像ファイルを作るという以下の記事を拝見して,Ruby と Cairo の組み合わせならどう書くかな,というのが本記事の主旨です。

漢字を画像として出力【備忘録】 - Qiita


cairo

Ruby には cairo という gem があります。広く使われているベクターグラフィックスライブラリーの Cairo を Ruby で簡単に扱えるようにしたものです。

Ruby の cairo を知るには Rubyist Magazine の以下の記事が役に立ちます。

cairo: 2 次元画像描画ライブラリ

だいぶ前の記事なので一部内容が古くなっているところもありますが,現在でも良い入門記事だと思います。

まずこれを

gem install cairo

でインストールしておきます。


コード

require "cairo"

size = 16

surface = Cairo::ImageSurface.new Cairo::FORMAT_ARGB32, size, size
context = Cairo::Context.new surface

context.move_to 0, size * 0.88
context.set_font_size size
context.select_font_face "IPAexGothic"
context.show_text "永"

surface.write_to_png "a.png"

context に対して操作しているところは,見ればだいたい何をやっているか分かりそうですが,

context.move_to 0, size * 0.88

における 0.88 という謎の定数が気持ち悪いですね。

漢字のグリフ(字形データ)は正方形の枠を基準に設計されていますが,ここで使っている IPAexGothic をはじめ,多くの日本語フォントで,その正方形の左上から 88% 下に下がったところにグリフの座標原点が設定されているためです。