§ Замена Infinality для freetype 2.9

Итак с выходом нового FreeType 2.9 и обновления библиотеки HarfBuzz до версии 1.4.2, где осуществлён переход на FreeType 2.9 по умолчанию, пришел конец эре патчей Infinality для красивого рендера шрифтов. В данной статье я расскажу вам как вернуть шрифты если не в состояние Infinality то как минимум не хуже используя стандартную библиотеку FreeType 2.9

Я думаю вы уже натыкались на подобные статьи где ребята пишут собственные улучшайзеры. Однако посмотрев на них подробнее я был глубоко разочарован. По большому счёту они просто ставят на систему куеву хучу каких-то левых шрифтов после чего успешно подменяют ими стандартные шрифты типа Helvetica, Arial и Times New Roman что бы шрифт на экране не выглядел вырвиглазно.

Лично мне такой подход претит по двум параметрам: во-первых он не решает основной проблемы - плохой рендер стандартных шрифтов, а во-вторых доставляет истинное неудобство тем у кого как и у меня в системе установленны всякие SanFrancisco, Helvetica и прочие Arial. В этом случае на ваши предпочтения будет забит болт и вы все равно будете смотреть на экране шрифты которыми заменили в настройках нормальную Helvetica, а мне не нравится когда мои настройки система игнорирует и показывает то что ей кажется лучше а не то что я выбрал.

В итоге конфигурация на которой я остановился и которая меня целиком устраивает выглядит так:

1. В системе установлен стандартный freetype2 и fontconfig без всяких infinality или infinality-ultimate.

2. Файл /etc/profile.d/freetype2.sh содержит следующую строку:

export FREETYPE_PROPERTIES="truetype:interpreter-version=40"

Да я знаю что infinality был добавлен во FreeType 2.8 и требовал interpreter-version=38, однако мои наблюдения показали что 40я версия даёт результат чуть лучше, плюс работает ощутимо быстрее, ибо требует меньше накладных ресурсов из-за выпилиной обратной совместимости со старыми шрифтами Microsoft. Я такие шрифты не использую, но если у вас есть такие то попробуйте выставить версию в 38 возможно это поможет.

3. Я выкинул из /etc/fonts/conf.d/ все симлинки за исключением следующих 5 файлов:

10-hinting-slight.conf
10-sub-pixel-rgb.conf
11-lcdfilter-default.conf
69-unifont.conf
70-yes-bitmaps.conf

У вас они могут иметь несколько другие цифры но смысл их достаточно прост: включение хиттинга в режими Slight, включение суб-пиксельного сглаживания в режиме RGB (подходит для большинства дисплеев), включение LCD фильтра, разрешение вывода пиксельных шрифтов и 69-unifont.conf содержит описание шрифтов для классов 'sans', 'serif' и 'sans-serif' которые так-же часто используются в системе.

По умолчанию эти классы используют убогие FreeSans и FreeSerif, однако вот что он содержит у меня

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
	<alias>
		<family>serif</family>
		<prefer>
			<family>Noto Serif</family>
			<family>Liberation Serif</family>
			<family>Times New Roman</family>
		</prefer>
	</alias>
	<alias>
		<family>sans</family>
		<prefer>
			<family>Noto Sans</family>
			<family>Droid Sans</family>
			<family>Liberation Sans</family>
		</prefer>
	</alias>
	<alias>
		<family>sans-serif</family>
		<prefer>
			<family>Noto Sans</family>
			<family>Droid Sans</family>
			<family>Liberation Sans</family>
		</prefer>
	</alias>
	<alias>
		<family>monospace</family>
		<prefer>
			<family>Roboto Mono</family>
			<family>PT Mono</family>
			<family>Liberation Mono</family>
		</prefer>
	</alias>
</fontconfig>

Исходя из собственных предпочтений вы можете настроить эти типы шрифтов самостоятельно.

В конце я хочу сказать что FreeType 2.9 на самом деле привносит довольно немало улучшений, и я все-же рекомендую использовать его, вместо отката HarfBuzz на предыдущую версию. А содержание вашего /etc/fonts/ в чистоте поможет вам избежать проблем со шрифтами и их нормальном отображении.


comments powered by Disqus