2014/12/15(月) [n年前の日記]
#1 [dxruby] DXRubyとBDFフォント
BDFフォントは、大昔の*NIX環境で使われることが多かったビットマップフォントのフォーマット。拡張子は .bdf で、中身はテキストファイル。
それを DXRubyで表示できないか試したり。たぶんそれっぽくできたような気がするのでアップロード。環境は Windows7 + Ruby 1.9.3 mingw + DXRuby 1.4.1。
_bdffont.rb
(必要なBDFフォントが置いてあるディレクトリ内で) bdffont.rb を実行すれば、上記のような画面に。
外部スクリプトから呼び出す時は、以下のような感じで。
BDFフォントファイルも含めて、ファイル一式を置いときます。ソースのライセンスは Public Domain ってことで。
_bdffontsupport_20141217.zip
_bdffontsupport_20141216.zip
_bdffontsupport_20141215.zip
実験用のbdfフォントは、 _M+ BITMAP FONTS と、 _milkjfフォント(Internet Archive) を使わせていただきました。ありがたや。
iso8859(英数字)と、jisx0208(ひらがな、漢字)には対応したけど、iso10646とやらの文字コードには対応できなかったです。Ruby を使って SJIS から iso10646 に文字コードを変換する方法が分からなくて。NKFモジュールのドキュメントを眺めてみたけど、変換できるのかどうか今一つ分からず。
それと、たぶん一部の文字表示でバグがありそうな予感。チルダ、波ダッシュ、円マークあたりは怪しいのではないかなあ…。もっとも、元のBDFフォントファイルのコード割り当てがおかしい場合もあるらしいし…。
それを DXRubyで表示できないか試したり。たぶんそれっぽくできたような気がするのでアップロード。環境は Windows7 + Ruby 1.9.3 mingw + DXRuby 1.4.1。
_bdffont.rb
(必要なBDFフォントが置いてあるディレクトリ内で) bdffont.rb を実行すれば、上記のような画面に。
外部スクリプトから呼び出す時は、以下のような感じで。
require 'dxruby' require_relative 'bdffont' bdf = BDFFont.new("mplus_j12r_jisx0208.bdf") bdf.add("mplus_f12r_iso8859.bdf") Window.loop do x, y = 10, 10 Window.draw_bdffont(x, y, "This is a BDF font", bdf) y += bdf.height Window.draw_bdffont(x, y, "The quick brown fox jumps over the lazy dog.", bdf) y += bdf.height Window.draw_bdffont(x, y, "1234567890 ! = - +", bdf) y += bdf.height Window.draw_bdffont(x, y, "あたらしい朝が来た希望の朝だ。", bdf) end
BDFフォントファイルも含めて、ファイル一式を置いときます。ソースのライセンスは Public Domain ってことで。
_bdffontsupport_20141217.zip
実験用のbdfフォントは、 _M+ BITMAP FONTS と、 _milkjfフォント(Internet Archive) を使わせていただきました。ありがたや。
iso8859(英数字)と、jisx0208(ひらがな、漢字)には対応したけど、iso10646とやらの文字コードには対応できなかったです。Ruby を使って SJIS から iso10646 に文字コードを変換する方法が分からなくて。NKFモジュールのドキュメントを眺めてみたけど、変換できるのかどうか今一つ分からず。
それと、たぶん一部の文字表示でバグがありそうな予感。チルダ、波ダッシュ、円マークあたりは怪しいのではないかなあ…。もっとも、元のBDFフォントファイルのコード割り当てがおかしい場合もあるらしいし…。
◎ 一応書いてはみたものの。 :
たぶん使い道がないような気も。
「このBDFフォントの形がどうしても好きなんや」「直接BDFフォントを同梱して描画したいのや」という場面では使えるかもだけど、そんな場面がどの程度あるかというと…。SFont や BMFont の形で一旦画像化したほうが使い勝手が良さそう、と思えたり。
まあ、「BDFフォントの描画もやろうと思えばできる」と分かったから、これはこれで。
- DXRuby は ttfフォントを使って縁取りや影をつけた綺麗な描画ができるし。
- ビットマップフォントを使いたい場合は、色々化粧して描画したい、という需要があるはずだから、白黒二値のビットマップフォント描画はさほど需要がナサゲ。
- BDFフォントは昔のフォントだから、独自ライセンスだらけ。プログラムと同梱できるBDFフォントは、さほど多くない印象。「フリーフォント」と謳っていても、フォント作者様への使用報告義務があるとか、商用利用禁止とか、時代を感じさせる妙な制限がついてたり。
「このBDFフォントの形がどうしても好きなんや」「直接BDFフォントを同梱して描画したいのや」という場面では使えるかもだけど、そんな場面がどの程度あるかというと…。SFont や BMFont の形で一旦画像化したほうが使い勝手が良さそう、と思えたり。
まあ、「BDFフォントの描画もやろうと思えばできる」と分かったから、これはこれで。
◎ 2014/12/16追記。 :
初期化処理で時間がかかり過ぎてる感じがしたので、少しだけ高速化。2秒 → 0.6秒ぐらいまで改善できたので差し替えておきました。
◎ 2014/12/17追記。 :
文字の番号を取得する部分でバグがあったので修正しました。
[ ツッコむ ]
#2 [cg_tools][font] BDFフォントの文字コードを変換する作業を試していたり
以下の記事を参考にして、 JIS X 0208 から ISO 10646 とやらに変換すべく作業を。
_ユニコードでエンコードしたmplusフォントの作り方 -- ぺけみさお
_sylpheed-2 で M+ BITMAP キター━━(゜∀゜)━━!! - nevil diary
_Mona Font, a Japanese font for text arts - Browse /monafont/monafont-2.90 at SourceForge.net から、monafont-2.90.tar.bz2 をDL。解凍すると、ttftools/jis2unicode というツールが入手できるので、コレを使って変換する、らしい。jis2unicode は Perlスクリプトなので、jis2unicode.pl にリネーム。
英数字部分を追加する。
ヘッダのあたりを書き換える。
~/.gimo-2.6/fonts/ 以下にコピーしてみたら、GIMPで使えるようになった。
美咲ゴシックフォントやナガ10フォントも試してみたけど、そちらも GIMP で使えた。イイ感じ。
と思ったのだけど。ふと気になって、ナガ10フォントのライセンスを調べたら、独自ライセンスで商用利用時はフォント作者への報告が必須のようで。何かの拍子にうっかり使ってしまったら後で面倒だから、ナガ10フォントは削除。
美咲ゴシックのほうはそういった制限が無さそうなのでそのままに。
_ユニコードでエンコードしたmplusフォントの作り方 -- ぺけみさお
_sylpheed-2 で M+ BITMAP キター━━(゜∀゜)━━!! - nevil diary
_Mona Font, a Japanese font for text arts - Browse /monafont/monafont-2.90 at SourceForge.net から、monafont-2.90.tar.bz2 をDL。解凍すると、ttftools/jis2unicode というツールが入手できるので、コレを使って変換する、らしい。jis2unicode は Perlスクリプトなので、jis2unicode.pl にリネーム。
cat mplus_j10r.bdf | jis2unicode.pl -b > umplus_j10r.bdfこれで iso10646 に変換された。
英数字部分を追加する。
cat mplus_f10r.bdf >> umplus_j10r.bdf
ヘッダのあたりを書き換える。
- jisx0208.1990-0 と書かれてる部分を、iso10646-1 に。
- CHARSET_REGISTRY "jisx0208.1990" を、CHARSET_REGISTRY "iso10646" に。
- CHARS 6963 を CHARS 7187 に。(日本語文字数+英数字文字数の値に書き換える。)
- ENDFONT で検索して、真ん中あたりにある余分なヘッダを削除。
- FONT、FOUNDRY、FAMILY_NAME のあたりがフォント名として使われるらしいので、他のフォントとダブらないように修正。
FONT -mplus-mplusBDFj10r-medium-R-normal--10-100-75-75-C-100-iso10646-1 ... FOUNDRY "mplusBDFj10r" FAMILY_NAME "mplusBDFj10r"
~/.gimo-2.6/fonts/ 以下にコピーしてみたら、GIMPで使えるようになった。
美咲ゴシックフォントやナガ10フォントも試してみたけど、そちらも GIMP で使えた。イイ感じ。
と思ったのだけど。ふと気になって、ナガ10フォントのライセンスを調べたら、独自ライセンスで商用利用時はフォント作者への報告が必須のようで。何かの拍子にうっかり使ってしまったら後で面倒だから、ナガ10フォントは削除。
美咲ゴシックのほうはそういった制限が無さそうなのでそのままに。
[ ツッコむ ]
以上、1 日分です。