Asial Blog

Recruit! Asialで一緒に働きませんか?

Linux でフォントのレンダリングを好みのものにする方法

カテゴリ :
バックエンド(インフラ)
タグ :
Linux
freetype
フォント
PC を使っていると文字を見るのは避けては通れませんよね。
特に近年は日常的に PC を利用する機会が増えた為、長時間文字を見ることになりがちです。
文字が綺麗に表示されていれば、読みやすいだけでなく目の負担も心なしか減り、作業効率も向上します。
そこで今回は Linux のフォントのレンダリングを自分好みのものにする方法をご紹介します。

Linux では fonts.conf で各種設定・調整が行えますが、今回ご紹介するのは freetype に Infinality.net にて配布されているパッチを当てる方法です。
このパッチは環境変数を用いて freetype にパラメータを渡せるようにし、レンダリングを調整できるようにします。

Linux も近年は綺麗なレンダリングを行なっていますが、個人的には Mac の様な太く濃いレンダリングが好みなので、調整する際の目標は Mac のそれになります。
(ちなみに Windows であれば mactype を利用することでレンダリングを調整することができます。)

では早速パッチを当てた freetype をビルドしましょう。
なお、以下の内容は Kubuntu 12.04 を対象としています。
また、Fedora や Arch Linux はパッケージが用意されていますので、自前でビルドする必要はありません。

パッチを当てた freetype をビルドする



まずは Infinality Freetype Patches と freetype のソースを入手します。
  1. $ curl -LOJ http://www.infinality.net/fedora/linux/zips/freetype-infinality-2.4.10-20120616_01-x86_64.tar.bz2
  2. $ curl -LOJ http://downloads.sf.net/project/freetype/freetype2/2.4.10/freetype-2.4.10.tar.gz

続いて展開し、パッチを当てます。
  1. $ tar xvf freetype-infinality-2.4.10-20120616_01-x86_64.tar.bz2
  2. $ tar xvf freetype-2.4.10.tar.gz
  3. $ cd freetype-2.4.10
  4. $ patch -p1 < ../freetype-add-subpixel-hinting-infinality-20120616-01.patch
  5. $ patch -p1 < ../freetype-enable-subpixel-hinting-infinality-20120615-01.patch
  6. $ patch -p1 < ../freetype-entire-infinality-patchset-20120615-01.patch
※パッチは上記の順で当てる必要があります。

パッチ当てが完了したらビルド〜インストールしましょう。
(今回は /usr/local 配下にインストールします)
  1. $ ./configure
  2. $ make
  3. $ sudo make install

パッチを当てた freetype を各プログラムが参照するようにする



せっかくパッチを当てた freetype をインストールしても、各プログラムがそれを参照してくれなくては意味がありません。
そこで ldconfig でパッチを当てた freetype を認識させるようにします。
(この方法以外にも環境変数 LD_PRELOAD を使う方法がありますが、今回は割愛させて頂きます。)
が、Kubuntu 12.04 ではデフォルトで /usr/local 配下のライブラリが優先されるようになっているはずなので、何もしなくても以下の様に今回インストールした freetype が最初に現れるはずです。
  1. $ ldconfig -p | grep libfreetype
  2.         libfreetype.so.6 (libc6,x86-64) => /usr/local/lib/libfreetype.so.6
  3.         libfreetype.so.6 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libfreetype.so.6
  4.         libfreetype.so (libc6,x86-64) => /usr/local/lib/libfreetype.so

なお、ldconfig -p の結果に表示されなかったり、順序が後の方だったりした場合は適宜 ld.so.conf 等を修正する必要があります。

fontconfig による設定



さて、ここまででパッチを当てた freetype が利用できるようになりましたので、続いては設定です。
設定は fontconfig を使った設定と、環境変数を使った設定の2つがあります。

まずは fontconfig の設定を行いましょう。

設定ファイルが用意されていますので、それを /etc/fonts に配置します。
  1. $ cd /etc/fonts
  2. $ curl -L http://www.infinality.net/fedora/linux/zips/fontconfig-infinality-1-20120615_1.tar.bz2 | sudo tar jxvf -

いくつかプリセットが用意されています。
  1. $ ls /etc/fonts/infinality
  2. debug  infinality  linux  osx  osx2  win7  win98  winxp

今回は osx を使ってみます。
  1. $ cd /etc/fonts/infinality
  2. $ sudo ./infctl.sh setstyle osx

環境変数による設定



続いて、環境変数を使った設定を行いましょう。
レンダリングのパラメータを設定するため、好みのレンダリングにするにはこちらの設定が重要になります。

先ほどの Infinality Freetype Patches の中に infinality-settings.sh というスクリプトが含まれていますので、このスクリプトを改変・利用し、設定を行います。
まずはホームディレクトリにコピーし、ログインシェルの設定ファイルでログイン時に読み込まれるようにします。(以下は zsh の例です)
  1. $ cp infinality-settings.sh ~/.infinality
  2. $ echo "[[ -f ~/.infinality ]] && source ~/.infinality" >> ${ZDOTDIR}/.zshenv

先ほどの設定と同様、このスクリプトにもいくつかのプリセットが定義されています。
例によって OSX を使ってみましょう。
コピーしたファイルをエディタで開き、
  1. USE_STYLE="DEFAULT"

となっている部分を
  1. USE_STYLE="OSX"

と書き換えます。

これで大まかな設定が完了しました。
反映を確認するには一度ログアウトして再度ログインします。

結果



それではスクリーンショットで変化を確認してみましょう。

まずはデフォルトの状態。



続いてプリセット OSX を適用した状態。



どうでしょうか?
適用後の方が若干文字が濃くなっているのがわかるかと思います。

今回はプリセットを使いましたが、もちろんプリセットを用いずに各パラメータを指定することができます。
上記スクリプトにはコメントで各パラメータの詳細な説明がされていますので、そちらを参考に設定されてみてはいかがでしょうか。
また、各パラメータの説明と実際に反映させてみたスクリーンショットをまとめたものを次回の記事にしようと考えています。

フォントのレンダリングの見栄えはお使いのディスプレイやコントラスト・ガンマ値などにより大きく変わるため、なかなか好みの見た目に調整するのは骨が折れますが、自分好みに調整された文字は見ているだけでもウットリできる魅力がありますので、ぜひお試しください。