Amélioration de la présentation des fontes

1 - Définitions

L’anticrénelage ou anti-aliasing, ou encore lissage de police, est une méthode permettant d'éviter le crénelage, un phénomène qui survient lorsqu'on visualise certaines images numériques dans certaines résolutions

Le hinting ou l’optimisation de rendu est l’utilisation d’instructions sur des contours vectoriels pour ajuster leurs rendus dans la grille de pixels. À basse résolution, l’optimisation est cruciale pour le rendu de dessin conforme à l’originale et pour la lisibilité de texte. Il peut être combiné avec l’anticrénelage, produisant des niveaux de gris ou des niveaux de sous-pixels.

FreeType est une bibliothèque logicielle, qui met en œuvre un moteur de rendu de police de caractères. Elle est écrite en C et principalement utilisée pour obtenir un rendu bitmap des polices vectorielles, mais fournit également un ensemble d'outils pour un certain nombre d'autres opérations liées aux polices.

FreeType 2 gère tout un ensemble de formats de police dont TrueType, Type 1, et OpenType.

freetype est fourni par le paquet libfreetype6

2 - Principe

La présentation des fontes à l'écran peut-être optimisée en jouant sur les paramètres :

3 - Fichier de configuration fonts.conf

$ nano ~/.config/fontconfig/fonts.conf
<?xml version="1.0"?>
<fontconfig>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- Fichier de configuration fonts.conf -->

<!--
Définition des paramètres d'amélioration de la présentation des fontes
-->
<match target="font" >
<edit name="rgba" mode="assign"><const>rgb</const></edit> <!-- valeurs possibles :unkonw, rgb, bgr,vrgb,vbgr,none -->
<edit name="hinting" mode="assign"><bool>true</bool></edit>
<edit name="antialias" mode="assign"><bool>true</bool></edit>
<edit name="autohint" mode="assign"><bool>false</bool></edit>
<edit name="hintstyle" mode="assign"><const>hintslight</const></edit> <!-- valeurs possibles : hintnone, hintslight, hintmedium, hindfull -->
<edit name="lcdfilter" mode="assign"><const>lcdlight</const></edit> <!-- valeurs possibles : lcdnone, lcddefault, lcdlight, lcdlegacy -->
</match>
</fontconfig>

Note : Ordre de sous-pixellisation : l'ordre de sous-pixellisation est généralement RVB sur un écran LCD. Un test est proposé sur ce site : http://www.lagom.nl/lcd-test/subpixel.php

Menu Apparence - Polices

Les paramètres de la configuration effectuée dans le menu Apparence / Polices sont définis dans le fichier xsettings.xml. S'il est nécessaire de les neutraliser, afin par exemple de ne pas créer d'interférence avec une autre méthode de configuration, éditer le fichier xsettings.xml et mettre les types correspondants à empty. Par exemple :

$ nano ~/.config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml
....
</property>
<property name="Xft" type="empty">
<property name="DPI" type="empty"/>
<property name="Antialias" type="empty"/>
<property name="Hinting" type="empty"/>
<property name="HintStyle" type="empty"/>
<property name="RGBA" type="empty"/>
</property>
.....

3 - Infinality

3.1 - Installation dans debian 8 - jessie

Infinality n'est pas dans les dépôts Debian et différentes méthodes d'installation sont envisageables : voir

http://www.webupd8.org/2013/06/better-font-rendering-in-linux-with.html

L'installation décrite ci-dessous, est directement reprise de : https://github.com/cmpitg/infinality-debian-package :

# aptitude install git devscripts
$ mkdir infinality
$ cd infinality
$ git clone https://github.com/cmpitg/infinality-debian-package.git
$ cd infinality-debian-package/freetype-infinality
$ dpkg-checkbuilddeps
$ cd ../fontconfig-infinality/
$ dpkg-checkbuilddeps
# aptitude install xxxxxxx xxxxxxx xxxxxxx
$ cd ../freetype-infinality/
$ ./build.sh
$ cd ../fontconfig-infinality/
$ ./build.sh
$ cd ../
# dpkg -i freetype-infinality/*.deb fontconfig-infinality/*.deb

3.2 - Configuration

# bash /etc/fonts/infinality/infctl.sh setstyleSelect a style:
1) debug 3) linux 5) osx2 7) win98
2) infinality 4) osx 6) win7 8) winxp
#? 2
conf.d -> styles.conf.avail/linux
# nano /etc/profile.d/infinality-settings.sh

Vérifier que la valeur du DPI est correcte (ligne Xft.dpi) , sinon la corriger :

XFT_SETTINGS="
Xft.antialias: 1
Xft.autohint: 0
Xft.dpi: 116
Xft.hinting: 1
Xft.hintstyle: hintfull
Xft.lcdfilter: lcddefault
Xft.rgba: rgb

3.3 - Infinality dans debian 9 - stretch

Infinality n'est plus maintenu par son créateur et la version existante risque de ne pas être compatible avec fontfree Version 2.7 présente dans stretch, version qui elle-même intègre certaines fonctionnalités de infinality. Voir : http://forums.debian.net/viewtopic.php?f=16&t=88545&start=90

Annexe 1 - Configuration de la fonte du gestionnaire de session lightdm

La configuration des polices de l'écran de lightdm s'effectue à partir du fichier lightdm-gtk-greeter.conf :

$ cat /etc/lightdm/lightdm-gtk-greeter.conf
[greeter]
background = /usr/share/images/desktop-base/login-background.svg
theme-name = Bluebird
xft-antialias = true
xft-hintstyle = hintslight
xft-rgba = rgb
show-indicators = ~clock;~language;~session;~power
show-clock = true
clock-format = %H:%M
icon-theme-name = oxygen
font-name = Liberation Sans 10