注: この記事にライセンスは設定されていません。
これはRuby Advent Calendar jp: 2010の参加エントリです。前日はysakakiさんでした。
今年のAdvent Calender界隈では惚れさせを集めたり、惚れさせを作ったり、忙しい人でも惚れさせを見れるようにしたりしているので、もう一歩先を行くことにしました。
地獄の名札ジェネレータ
名札には名前を大きく書きましょうジェネレータに「地獄モード」が追加されました。
これを使うと札幌Ruby会議03のプロの無職を楽しむことができます。
地獄のコマンドラインジェネレータ
地獄の名札ジェネレータはTwitterのプロフィール画像や説明文から惚れさせ名札を生成します。フォームに自分のTwitter IDを(カチャカチャカチャ…)と入力して(ッターン!)と「生成!」できるのでお手軽ですが、もっと惚れさせるために試行錯誤したい場合は少し不便ですね。
ということで、ささたつさんが作ったmisawa gemを画像生成に対応させました。
% sudo gem install gtk2
% wget https://github.com/kou/misawa/raw/master/lib/misawa.rb
% wget -O misawa_background.jpg http://a2.twimg.com/profile_images/461389564/aaa.jpg
% ruby -r misawa -e 'misawa("俺ってそんなに\n唐揚げとたいやき食べてる\nイメージあるー?\n\nそれどこ情報?どこ情報よー?")'
% display misawa.png
縦書き
名言はPangoとcairoで描画しています。この2つのフリーソフトウェアを組み合わせることにより日本語の縦書きも描画できます。「ー」など単純に回転させるだけだと問題が起こる文字も、フォントが対応していれば1きちんと描画できます。
ポイントはPangoGravityとcairo_rotate()です。
Pangoにはpango-viewというPangoのオプションを簡単に試せるツールがついています。これを使ってオプションの効果を確認します。
まず、そのまま描画した場合です。横書きになっていますね。
% pango-view --output normal.png --font "MotoyaLMaru 48" --text "つれーわー"
次に、PangoGravityにPANGO_GRAVITY_EASTを指定した場合です。横に転がっていますが縦書きになっています。
% pango-view --output east.png --font "MotoyaLMaru 48" --text "つれーわー" --gravity east
ここまでくればあとは実質回転させるだけだからつれーわー。最後に、-90度回転させれば縦書きが完成です。
% pango-view --output east-rotate.png --font "MotoyaLMaru 48" --text "つれーわー" --gravity east --rotate -90
この縦書き機能はPango 1.16からサポートされています。Pango 1.16は2007年にリリースされているので、4年くらい前に見て、一番先に飽きた人もいるのではないでしょうか。
もちろん、Ruby/PangoでもPangoGravityを使うことができます。具体的な使い方は名札ジェネレータかmisawa gemを見てください。misawa gemの方がシンプルでわかりやすいでしょう。
名言を描画するところでは、文字を縦書きで描画するだけではなく、縦書きの文字に白い影もつけています。そのあたりのやり方もソースを見ればわかるでしょう。
まとめ
惚れさせるために必要なRubyで縦書きを描画する方法を紹介しました。みなさんもRuby/Pangoとrcairoを使って縦書きなクリスマスカードや年賀状をRubyで生成してみてはいかがでしょうか。
明日のRuby Advent Calendar jp: 2010はtmaedaさんです。最後なのでとてもすごいのがくるはずですよ!
-
たぶん。フォントによって問題が起きたり起きなかったりするから。 ↩