Шрифты в Linux: различия между версиями

Содержимое удалено Содержимое добавлено
исправление ошибок
Строка 22:
 
* '''растровые шрифты''', т.е. наборы точек или пикселей, представляющие изображение каждого глифа.
* '''векторные шрифтшрифты''', т.е. наборы инструкций ([[w:Кривая_Безье|кривые Безье]], например), описывающие форму глифов.
 
Растровые шрифты быстрее и проще обрабатываются компьютером, однако для каждого начертания и размера требуется новый растровый шрифт. Векторные шрифты можно произвольно масштабировать без потери качества, однако они требуют больше ресурсов компьютера для обработки. К растровым и векторным шрифтам можно применять те же правила сравнения, что и для растровых (.png, .gif, .tiff, .jpeg) и векторных (.svg, .wmf) изображений: качество растровых изображений при увеличении ухудшается, а при масштабировании векторных остаётся примерно на таком же уровне.
Строка 59:
{{Внимание|В старых руководствах можно встретить рекомендацию использовать программу ''ttmkfdir'' для индексирования шрифтов формата TrueType, однако последние версии ''mkfontscale'' сами способны выполнить эту работу, так что никакой необходимости в ''ttmkfdir'' больше нет.}}
 
Итак, чтобы подготовить каталог, содержащий файлы шрифтов для использования в X-сервере, необходимо последовательно выполнить две команды: ''mkfontscale'' и ''mkfontdir'', чаще всего этого бывает достаточно. Теперь этот каталог можно прописать в файле xorg.conf и X-сервер при следующем запуске «увидит» новые шрифты.
 
Однако, можно обойтись и без перезагрузки, для этого нужно выполнить команду <tt>xset +fp путь-к-каталогу-со-шрифтами</tt>. Если вы изменили что-то в уже добавленном каталоге, или же в системном, выполните команду <tt>xset fp rehash</tt>, чтобы X-сервер обновил список загруженных шрифтов. Обратите внимание, что упомянутые программы работают в контексте X-сервера, поэтому их нужно запускать в терминале изнутри X-сессии.
Строка 124:
 
== Отрисовка шрифтов на стороне X-клиента ==
К началу 2000 года стало очевидно, что рендеринг шрифтов исключительно на стороне X-сервера имеет множество серьёзных ограничений, которые препятствуют дальнейшему развитию многих видов приложений. Очевидное решение — полностью перенести отрисовку шрифтов на сторону X-клиента и передавать X-серверу уже готовые растровые изображения —, очевидно, крайне неэффективно. Поэтому был выбран промежуточный вариант, включающий в себя как рендеринг на стороне X-сервера, так и на стороне X-клиента. Избранный подход зависит от нескольких ключевых технологий, о которых я хочу рассказать подробнее.
 
=== Небольшой экскурс в историю<ref name="herrb-hopf">Основано на статье Matthieu Herrb и Matthias Hopf [http://www.openbsd.org/papers/eurobsd2005/herrb-hopf.pdf New Evolutions in the X Window System].</ref> ===
В классическом X-мире шрифты являются серверными ресурсами и непосредственное отображение текста производится X-сервером. Главное преимущество такого подхода заключается в том, что работающее с текстом X-приложение должно передавать на сервер относительно небольшой объём данных. Тем не менее, выбранный подход вызвал большое недовольство среди разработчиков. Программам для просмотра PDF или PostScript, например, необходимо иметь возможность рендерить внедрённые в документы шрифты, чтобы их отобразить. И более того, приложениямиприложениям нужен доступ к более детальным характеристикам шрифта, чем просто растровые картинки. Все попытки расширить серверную модель рендеринга шрифтов и решить эти проблемы провалились.
 
Примерно в это же время Кейт Паккард (Keith Packard) разработал для XFree86 <ref name="xfree86">[[w:en:XFree86|XFree86]] — некогда популярный X-сервер</ref> расширение [[w:en:XRender|Render]]<ref>Это расширение представляет собой реализацию метода [[w:Альфа-канал|Альфа-композиции]] (смешивание изображений Портера-Дафа, [[w:en:Alpha_compositing|Porter-Duff image compositing]]). Можно также встретить его написание в виде '''XRender'''.</ref>. Расширение позволило реализовать два эффекта: полупрозрачность и [[w:Сглаживание|антиалиасинг (сглаживание)]], а также возможность отрисовывать сглаженный текст. И было принято историческое решение — перенести рендеринг шрифтов со стороны X-сервера на сторону клиентского приложения. Чтобы этого добиться, была разработана новая библиотека рендеринга шрифта, которая получила название '''Xft2'''<ref name="xft">[http://fontconfig.org/wiki/ http://fontconfig.org/wiki/]</ref>, также была разработана сопровождающая библиотека '''fontconfig''' — для установки, именования и кэширования шрифтов. Xft2 основана на библиотеке Freetype, она может обрабатывать несколько форматов шрифтов: традиционные растровые PCF-шрифты из встроенной системы отрисовки, Postscript Type 1 и TrueType. Также Xft2 предоставляет несколько других важных нововведений, среди которых возможность непосредственно обрабатывать текст в кодировке UTF-8.
Строка 133:
Проведённые тесты показали, что новая, клиентская, модель отрисовки шрифтов не оказывает практически никакого влияния на общую производительность системы, а во многих случаях снижает количество взаимных сообщений между приложением и сервером, радикально уменьшая, таким образом, время загрузки приложения. Библиотеки Xft2 и fontconfig в настоящий момент представляют собой фактически стандартный способ отрисовывания текста в X-тулкитах и приложениях. Предыдущий, серверный, механизм считается устаревшим и больше не должен использоваться в новых разработках.
 
Рост объёма векторной графики в пользовательском интерфейсе привёл к рождению кроссплатформенной библиотеки '''cairo'''. Проект был основан Кейтом Пакардом и Карлом Вортом (Carl Worth) изначально для использования в X Window System и назывался '''Xr/Xc'''. Однако позднее был переименован в cairo, чтобы выразить идею кроссплатформенности и независимости от X-сервера. Как и в Xft2, в cairo используется Freetype для генерации образов глифов, а также Render для вывода сгенерированных образов на экран дисплея X-сервера.
 
=== X Render Extension ===
Строка 153:
As the required set of operating system language and locale support expands to cover more of the world's peoples, the number of glyphs included in most fonts also increases. Popular outline fonts contain thousands of glyphs today. Where incrementally rendering glyphs was considered a reasonable optimization ten years ago, it is now an essential part of any font mechanism to minimize the memory usage of each font and reduce the time taken when accessing a new font. The Render extension provides for such incremental rasterization by allowing Glyphs to be added when needed to an existing GlyphSet. No information flows from the X server to the client when adding new Glyphs which makes the process entirely asynchronous. This asychrony permits reasonable performance even in the face of high network latency.
-->
Как только приложение передаёт образы глифов, которые оно хочет показать, X-сервер сохраняет память, используя один и тот же объект с глифом где только можно. Это предотвращает дублирование глифов, и в случае когда они посылаются разными приложениями, и даже внутри одного приложения. В то же время расширение Render также позволяет приложениям делить работу по растеризации глифов<!--, это пока ещё не используется, но обещает в будущем увеличение производительности-->.
<!--
As applications transmit images of each glyph they display, the X server conserves memory by sharing identical glyphs wherever possible. This eliminates duplicate glyphs both when sent by separate applications and even within each application.. While the Render extension also provides the ability for applications to share the job of rasterizing glyphs, this hasn't yet been exploited and offers the possibility of future performance enhancements.
Строка 241:
Три субпиксела разных цветов человеческому глазу кажутся одним пикселом некоторого цвета.
 
весь текст страницы, начиная с этого места и до конца документа,
является устаревшим, и будет в ближайшее время удалён
 
==Xft==