LinuxのClearTypeアンチエイリアス、またはUbuntuのようなフォント

こんにちは、Habr。 最近、新しいUbuntuを見ましたが、彼女のフォントが私のMandriva(GNOME)よりも美しいことがうらやましかったです。 そして掘り始めました。 私は長い間掘り、実験しましたが、最終的には望ましい結果を達成しました。 今、私はそれをどうやってやったかお話したいと思います。 これを行うには、 ClearTypeアンチエイリアスをサポートして、フォントのレンダリングを担当するライブラリを再構築しました。 Ubuntuよりもきれいかどうかはわかりませんが、気に入っています。 それでは始めましょう。



図書館



フォントのレンダリングには次のライブラリが使用されます。

カイロは、ベクターグラフィックスをレンダリングするためのライブラリです。

Xft -X-extension X Rendering ExtensionでFreetypeラスタライザを使用するように設計された無料のライブラリ。 これは通常、X Window SystemでFreeTypeフォントを使用するために必要です。

FreeTypeは、フォントとその操作をラスタライズするために使用されるライブラリです。



ライブラリソース



これは最新の安定バージョンでしたが、現在は次のとおりです。

カイロ1.8.8

Xft 2.1.14

FreeType 2.3.11



主なパッチ



パッチについては、すべてのArch Linuxユーザーのコミュニティのおかげです。

各パッチは複雑なことは何もせず、ライブラリソースにいくつかの変更を加えるだけです。 それらを使用するには、リポジトリにあるパッチパッケージが必要です。 ここで 、その使用法とパラメーターとキーについて読むことができます 。 パッチコードは、ライブラリの新しいバージョンで動作するように更新されました。 それらのいずれかのコードを見ると、ソース内のコードを追加および置換することにより、これをすべて手動で行うことができます。



カイロ:

cairo-1.2.4-lcd-cleartype-like.diff -ClearTypeフォントのレンダリング。 同様の平滑化は、ubuntuでも使用されます(比較に基づく)。 このメソッドはMicrosoftによって登録されていることを思い出させてください。



Xft:

libXft-2.1.14-lcd-cleartype.patchはcairoと同じです。 これは、Lotus SymphonyのOperaのフォントに影響しました。



フリータイプ:

bytecode.patch- Appleが特許を取得したフォントレンダリングを含むため、最初はオフになっています。 これはオプションであり、含まれない場合があります。

freetype-2.2.1-subpixel-disable-quantization.diff-名前はそれ自体を表しており、量子化をオフにします。

freetype-2.3.0-enable-spr.patch-サブピクセルレンダリングを有効にする

freetype-2.2.1-enable-valid.patch

freetype-2.2.1-memcpy-fix.patch



それらには、まだカノニカルアンチエイリアシングパッチ(freetype2-ubuntu、libxft-ubuntu、cairo-ubuntu)がありますが、私にはあまり役に立たず、さらに悪化しました。 さらに、それらはライブラリの新しいバージョン用ではありません。



図書館集会



プロセス内のコンパイルのためにすべての依存関係をインストールします。すべての依存関係を覚えていないためです。

カイロの集まりを始めましょう。 cairo-1.8.8 / sourceフォルダーに移動します。 パッチをそこにドロップし(私にとってはとても便利でした)、コンソールで実行します:

$ patch -Np1 -i cairo-1.2.4-lcd-cleartype-like.diff

$ ./configure --prefix=/usr

$ make && make install






当然、make installコマンドにはルート権限が必要なので、コンソールですべてをルートから実行するか、sudoを使用してインストールします。

Xをリロードすると、フォントのレンダリングに大きな違いが見られます。



次に、Xftを収集します。 libXft-2.1.14 /:

$ patch -Np1 -i libXft-2.1.14-lcd-cleartype.patch

$ ./configure --prefix=/usr

$ make && make install








今FreeType。 Appleのレンダリングを使用する場合は、bytecode.patchを課します。 freetype-2.3.11 /:

$ patch -Np0 -i bytecode.patch





また、バイトコードなしで適用できる追加の変更。 あなた自身でそれを見ることがすでに必要です、彼らとそれが良いかどうか:

$ patch -Np1 -i freetype-2.2.1-subpixel-disable-quantization.diff

$ patch -Np1 -i freetype-2.3.0-enable-spr.patch

$ patch -Np1 -i freetype-2.2.1-enable-valid.patch

$ patch -Np1 -i freetype-2.2.1-memcpy-fix.patch

$ ./configure --prefix=/usr

$ make && make install








その後、Xを再起動できます。



終わり



違いを確認できるように、スクリーンショットをお届けします。

デフォルト設定のアプリケーション、ドキュメント、ヘッダー、デスクトップのフォントはすべてSansです。

これは、私の「手つかずの」ライブラリを使用したFirefoxの外観です。

1。



Cairoがパッチを適用したFirefox:

今ではUbuntuのように見えます。

フル(ヒント)フォント(GNOMEのフォント設定内):

2。

Ubuntuのデフォルトであるフォントの弱い(わずかな)ヒント:

3。



Xftがパッチを適用したOpera:

ヒントフォント:

4。



Firefoxは、bytecode.patchを使用してFreeTypeにパッチを適用しました。

フルヒントフォント:

5。

ヒントフォント:

ちなみに、Ubuntuのようにも見えます。

6。



最後に、GNOME(またはKDE)のフォント設定で、特にdpiで遊んでみることをお勧めします。 それでもパッチを試してみて、最良の結果を得ることができます。

それだけです。 みんなのおかげで、誰かが助けてくれたらいいなと思います。



更新:

リクエストに応じて、上記の6つのスクリーンショットすべてから概要写真を投稿します。

画像

GNOMEのフォント設定では、常に「サブピクセル(LCDモニター)」というアンチエイリアスがかかっていました。

スクリーンショットでは、Operaではフォントがやや暗いことが示されていることにも注意してください。 しかし、これはOperaがXftを使用し、Firefox(およびgnome全体)がcairoを使用しているためです。 したがって、結論-libxft-cleartypeとcairo-cleartypeのレンダリングには違いがあります。



まだ更新中:

パッチのソースコードをさらに掘り下げました。 CairoのパッチとXftのパッチを比較してください。 私はそれらに非常に興味深い類似の行を見つけました:

Xftパッチ:

+static const int fir_filter[5] = { 0x10, 0x40, 0x70, 0x40, 0x10 };





Cairoパッチ:

+static const int fir_filter[5] = { 0x1C, 0x38, 0x55, 0x38, 0x1C };





Xftのこの行のコメント(/ *注:フィルターを対称に保つ、または悪いことが起こる* /)から、これはサイズ、周波数、またはそのようなものの配列であることがわかりました。 さて、どのように私は何かを知っていますか?))しかし、配列の名前によって、あなたはこの事のアルゴリズムがそこで使われたと思うかもしれません。 ))それでも、どうやって知るのですか? 私は長い間考えていなかったので、同じ16進数(サイズ、頻度?)をXftのパッチと同じようにこの配列のCairoのパッチで再構築しました。 そして、見よ、今ではどこでもOpera(Qt)と同じ暗くてクリアなフォントを持っています。

Firefox、すべてのライブラリにパッチが適用され、フォントのフル(フル)仕様(ヒント):

7。

画像

5番目の画面と比較してください。



Firefox、Cairoのみがパッチ適用され、フォントの弱い(わずかな)洗練(ヒント):

8。

画像

3番目の画面と4番目の画面、Operaを比較してください。



すべて、今私は満足しています。 =) カイロの修正パッチ



All Articles