試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

Wineのバージョンによりフォントのアンチエイリアシングが一部無効になる件と、フォント編集による対処方法について

(2014/9/11)ここで扱っている内容は非常に古く、アンチエイリアシングの扱いも大きく変わっている。最新の情報はまとめドキュメント(モバイル版ページ)を参照。
以下、以前の内容となる。


Wineのバージョン0.9.50の時点では、一部のフォントのアンチエイリアシング*1が無効になっているように見えるが、どのバージョンから変わったのかを記録していなかったので、過去のバージョンをさかのぼって確認してみた。

  1. バージョン0.9.47から埋め込みビットマップ使用強制?
  2. gdi32.dll.soの修正による対処(id:nosanosaさんに感謝)
  3. フォントから埋め込みビットマップを抜くことで対処は可能
  4. フォント置換レジストリ設定の修正
  5. 「 (ビットマップ無し)」なフォントを使用する置換設定を行うinfファイル

バージョン0.9.47から埋め込みビットマップ使用強制?

確認の結果、

バージョン0.9.46までは上のようになっていたのが、

0.9.47にしたところでこのようになったことが分かった。それ以降のバージョンも同様。
更に、0.9.47以降であっても、場所やフォントによってはアンチエイリアシングされるように見えたため、色々と(フォントやサイズを変えて)試したところ、内蔵(埋め込み)ビットマップを持つフォントにおいて、そちらが優先して使用されているらしいということまでは分かったのだが、設定項目として、埋め込みビットマップを優先しない設定というのは見当たらない。

gdi32.dll.soの修正による対処(id:nosanosaさんに感謝)

(2008/2/2)dlls/gdi32/freetype.cを修正することで、以前のように「埋め込みビットマップは優先しない」動作に戻せることが分かった。
下はgdi32.dll.soを修正して再ビルドする作業例(環境によってはディレクトリ名が一部異なる)。バージョンは0.9.54で確認。

$ tar jxf [wine-0.9.54.tar.bz2の場所]
$ cd wine-0.9.54/
$ sed -i -e 's/ && format != WINE_GGO_GRAY16_BITMAP//' -e 's/ || format ==  WINE_GGO_GRAY16_BITMAP//' dlls/gdi32/freetype.c
$ ./configure
$ make depend
$ for dir in libs tools; do cd ${dir}; make; cd ../; done
$ cd dlls/gdi32/; make LDFLAGS="-L/usr/lib32/wine"; cd ../../
$ sudo mv /usr/lib32/wine/gdi32.dll.so{,.orig}
$ sudo install -s dlls/gdi32/gdi32.dll.so /usr/lib32/wine/

以下は、フォント側の修正による対処方法。
(2008/6/20)もし、上の修正を行っても(あるいはバージョン0.9.46までのWineを使用しても)埋め込みビットマップが使用されてしまうという場合、以下の方法で対処することになる。
(2008/6/25)IPAモナーフォントのバージョンが1.0.7以上だと、上の修正だけではダメで、フォントに含まれるアンチエイリアシング関係の情報を修正しなくてはならないことが分かった(id:HoneSONGさんに感謝)。詳しくは「バージョン1.0.7以上のIPAモナーフォントとWine上のアンチエイリアシングについて」にまとめた。


フォントから埋め込みビットマップを抜くことで対処は可能

埋め込みビットマップを持つフォントの特定サイズにのみアンチエイリアシングがされない、ということが分かったので、「FontForgeでTrueTypeフォントの埋め込みビットマップ(EBDT)を取り除く手順」の要領で埋め込みビットマップを抜くことにより、アンチエイリアシングを使用することはできるようになる。ただし、フォントの修正が必要なので、多少の手間(とディスク領域)が必要になる。

下は「IPA モナー UIゴシック」フォントでの修正前と修正後の比較。

修正前(オリジナル)

修正後(ビットマップを抜いたフォント)
これで「MS UI Gothic」として使用しているIPAモナーUIゴシックは埋め込みビットマップが無くなり、大部分でアンチエイリアシングが復活した。しかし、ユーザインターフェースのフォントとしては、「MS ゴシック」などに割り当てたフォントに対しても同様の作業が必要(日本語アプリではこのフォント名での指定がされているところが結構あり、まだ埋め込みビットマップで表示される部分が残る)。

フォント置換レジストリ設定の修正

${WINEPREFIX}/user.regのフォント置換設定(Software\\Wine\\Fonts\\Replacements)において、フォント名の後ろに「 (ビットマップ無し)」を付けると、「 (\x30b3\x30c3\x30c8\x30de\x30c3\x30d7\x7121\x3057)」が付くことになる。例として、

"MS UI Gothic"="IPA \x30e2\x30ca\x30fc UI\x30b4\x30b7\x30c3\x30af"

"MS UI Gothic"="IPA \x30e2\x30ca\x30fc UI\x30b4\x30b7\x30c3\x30af (\x30b3\x30c3\x30c8\x30de\x30c3\x30d7\x7121\x3057)"

になる。

「 (ビットマップ無し)」なフォントを使用する置換設定を行うinfファイル

IPAモナーフォントに含まれる

以上5つのファイルに対してビットマップ抜きを行い、[ホームディレクトリ]/.fonts/などに修正後のフォントを配置した状態でこれらを使用するための設定。使用方法は「infファイルで初期設定時にレジストリを登録」を参照。

ファイル名: font-replace-nobitmap.inf

[Version]
signature="$CHICAGO$"

[DefaultInstall]
AddReg=FontReplace

[Strings]
FontReplace="Software\Wine\Fonts\Replacements"
FontSubStr="Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes"

[FontReplace]
HKCU,%FontReplace%,"MS UI Gothic",,"IPA <backslash>x30e2<backslash>x30ca<backslash>x30fc UI<backslash>x30b4<backslash>x30b7<backslash>x30c3<backslash>x30af (<backslash>x30d3<backslash>x30c3<backslash>x30c8<backslash>x30de<backslash>x30c3<backslash>x30d7<backslash>x7121<backslash>x3057)"
HKCU,%FontReplace%,"MS Gothic",,"IPA <backslash>x30e2<backslash>x30ca<backslash>x30fc <backslash>x30b4<backslash>x30b7<backslash>x30c3<backslash>x30af (<backslash>x30d3<backslash>x30c3<backslash>x30c8<backslash>x30de<backslash>x30c3<backslash>x30d7<backslash>x7121<backslash>x3057)"
HKCU,%FontReplace%,"MS Mincho",,"IPA <backslash>x30e2<backslash>x30ca<backslash>x30fc <backslash>x660e<backslash>x671d (<backslash>x30d3<backslash>x30c3<backslash>x30c8<backslash>x30de<backslash>x30c3<backslash>x30d7<backslash>x7121<backslash>x3057)"
HKCU,%FontReplace%,"MS PGothic",,"IPA <backslash>x30e2<backslash>x30ca<backslash>x30fc P<backslash>x30b4<backslash>x30b7<backslash>x30c3<backslash>x30af (<backslash>x30d3<backslash>x30c3<backslash>x30c8<backslash>x30de<backslash>x30c3<backslash>x30d7<backslash>x7121<backslash>x3057)"
HKCU,%FontReplace%,"MS PMincho",,"IPA <backslash>x30e2<backslash>x30ca<backslash>x30fc P<backslash>x660e<backslash>x671d (<backslash>x30d3<backslash>x30c3<backslash>x30c8<backslash>x30de<backslash>x30c3<backslash>x30d7<backslash>x7121<backslash>x3057)"
;; MS ゴシック
HKCU,%FontReplace%,"<backslash>xff2d<backslash>xff33 <backslash>x30b4<backslash>x30b7<backslash>x30c3<backslash>x30af",,"IPA <backslash>x30e2<backslash>x30ca<backslash>x30fc <backslash>x30b4<backslash>x30b7<backslash>x30c3<backslash>x30af (<backslash>x30d3<backslash>x30c3<backslash>x30c8<backslash>x30de<backslash>x30c3<backslash>x30d7<backslash>x7121<backslash>x3057)"
;; MS 明朝
HKCU,%FontReplace%,"<backslash>xff2d<backslash>xff33 <backslash>x660e<backslash>x671d",,"IPA <backslash>x30e2<backslash>x30ca<backslash>x30fc <backslash>x660e<backslash>x671d (<backslash>x30d3<backslash>x30c3<backslash>x30c8<backslash>x30de<backslash>x30c3<backslash>x30d7<backslash>x7121<backslash>x3057)"
;; MS Pゴシック
HKCU,%FontReplace%,"<backslash>xff2d<backslash>xff33 <backslash>xff30<backslash>x30b4<backslash>x30b7<backslash>x30c3<backslash>x30af",,"IPA <backslash>x30e2<backslash>x30ca<backslash>x30fc P<backslash>x30b4<backslash>x30b7<backslash>x30c3<backslash>x30af (<backslash>x30d3<backslash>x30c3<backslash>x30c8<backslash>x30de<backslash>x30c3<backslash>x30d7<backslash>x7121<backslash>x3057)"
;; MS P明朝
HKCU,%FontReplace%,"<backslash>xff2d<backslash>xff33 <backslash>xff30<backslash>x660e<backslash>x671d",,"IPA <backslash>x30e2<backslash>x30ca<backslash>x30fc P<backslash>x660e<backslash>x671d (<backslash>x30d3<backslash>x30c3<backslash>x30c8<backslash>x30de<backslash>x30c3<backslash>x30d7<backslash>x7121<backslash>x3057)"
HKLM,%FontSubStr%,"Courier New",,"MS Gothic"
HKLM,%FontSubStr%,"Comic Sans MS",,"<backslash>x307f<backslash>x304b<backslash>x3061<backslash>x3083<backslash>x3093"
HKLM,%FontSubStr%,"Verdana",,"Systema"
HKLM,%FontSubStr%,"Tahoma",,"MS UI Gothic"
HKLM,%FontSubStr%,"MS Sans Serif",,"MS UI Gothic"

使用したバージョン:

  • Wine 0.9.46, 0.9.47, 0.9.50, 0.9.54, 1.0

*1:0.9.50の時点ではサブピクセルレンダリングは未実装