mieki256's diary



2014/12/15(月) [n年前の日記]

#1 [dxruby] DXRubyとBDFフォント

BDFフォントは、大昔の*NIX環境で使われることが多かったビットマップフォントのフォーマット。拡張子は .bdf で、中身はテキストファイル。

それを DXRubyで表示できないか試したり。たぶんそれっぽくできたような気がするのでアップロード。環境は Windows7 + Ruby 1.9.3 mingw + DXRuby 1.4.1。

dxruby_bdffont_ss.png

_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
_bdffontsupport_20141216.zip
_bdffontsupport_20141215.zip

実験用のbdfフォントは、 _M+ BITMAP FONTS と、 _milkjfフォント(Internet Archive) を使わせていただきました。ありがたや。

iso8859(英数字)と、jisx0208(ひらがな、漢字)には対応したけど、iso10646とやらの文字コードには対応できなかったです。Ruby を使って SJIS から iso10646 に文字コードを変換する方法が分からなくて。NKFモジュールのドキュメントを眺めてみたけど、変換できるのかどうか今一つ分からず。

それと、たぶん一部の文字表示でバグがありそうな予感。チルダ、波ダッシュ、円マークあたりは怪しいのではないかなあ…。もっとも、元の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 にリネーム。
cat mplus_j10r.bdf | jis2unicode.pl -b > umplus_j10r.bdf
これで iso10646 に変換された。

英数字部分を追加する。
cat mplus_f10r.bdf >> umplus_j10r.bdf

ヘッダのあたりを書き換える。 とりあえず、フォント名は以下のようにしてみた。
 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 日分です。

過去ログ表示

Prev - 2014/12 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project