- Современный рендеринг текста в Linux: часть 1
- Настройка системы
- Установка FreeType
- Консольный рендерер
- Создаём файл C ( main.c в моём случае)
- Подключаем библиотеки FreeType
- Печатаем версию FreeType
- Загрузка шрифта
- Установка пиксельного размера для face
- Получение индекса для символа
- Загрузка глифа из face
- Отображение глифа в его контейнере (glyph slot)
- Вывод символа в консоль
- Заключение
- Делаем красивые шрифты с новым freetype2 в Linux
- How to Install FreeType 2.8 in Ubuntu 16.04, 17.04
- Install FreeType 2.8 via PPA in Ubuntu:
- FreeType-2.11.0
- Introduction to FreeType2
- Package Information
- Additional Downloads
- FreeType2 Dependencies
- Recommended
- Optional
- Optional (for documentation)
- Installation of FreeType2
- Command Explanations
- Как установить freetype linux
- Пакет FreeType-2.4.8
- Знакомимся с пакетом FreeType2
- Информация о пакете
- Дополнительные загрузки
- Дополнительная документация
- Установка пакета FreeType2
- Пояснение команды
- Описание пакета
Современный рендеринг текста в Linux: часть 1
Добро пожаловать в первую часть «Современного рендеринга текста в Linux». В каждой статье из этой серии мы разработаем самодостаточную программу на C для визуализации символа или последовательности символов. Каждая из этих программ будет реализовывать функцию, которую я считаю необходимой для современного рендеринга текста.
В первой части настроим FreeType и напишем простой рендерер символов в консоли.
Вот что мы будем писать. А вот и код.
Настройка системы
Установка FreeType
На Ubuntu нужно установить FreeType и libpng.
- У меня FreeType версии 2.8.1-2ubuntu2 , хотя на момент написания статьи последняя версия FreeType-2.10.1 , она тоже подходит.
- libpng версии (1.6.34-1ubuntu0.18.04.2)
Консольный рендерер
Создаём файл C ( main.c в моём случае)
Подключаем библиотеки FreeType
Для поиска пути include (т. е. каталогов, которые компилятор проходит при поиске файлов в #include ) для FreeType запускаем:
Строка -I/usr/include/freetype2 -I/usr/include/libpng16 содержит флаги компиляции, необходимые для подключения FreeType в программу C.
Печатаем версию FreeType
Внутри main() инициализируем FreeType с помощью FT_Init_FreeType(&ft) и проверяем наличие ошибок (функции FreeType возвращают 0 при успешном выполнении).
(С этого момента все функции, которые я буду использовать, взяты из справки по FreeType API).
Затем с помощью FT_Library_Version получаем номер версии.
Если скомпилировать с помощью последней команды, то выскочит ошибка компоновщика:
Для исправление добавляем -lfreetype .
Загрузка шрифта
Первый шаг для рендеринга символа — загрузка файла шрифта. Я использую ubuntu mono.
Чтобы понять точную разницу между конструкцией font face, семейством шрифтов (font family) и отдельными шрифтами, см. документацию FreeType.
Третий аргумент называется face index. Он создан, чтобы позволить создателям шрифтов вставлять несколько face в один размер шрифта. Поскольку у каждого шрифта есть по крайней мере один face, то значение 0 будет работать всегда, выбирая первый вариант.
Установка пиксельного размера для face
С помощью этой инструкции мы сообщаем FreeType желаемую ширину и высоту для отображаемых символов.
Если для ширины передать нуль, FreeType интерпретирует это как «такая же, как другие», в данном случае 32px. Это можно использовать для отображения символа, например, с шириной 10px и высотой 16px.
Эта операция может потерпеть неудачу на шрифте фиксированного размера, как в случае эмодзи.
Получение индекса для символа
Прежде всего, вернёмся к документации FreeType и установим соглашение об именах. Символ — это не то же самое, что глиф. Символ — это то, что указано в char , а глиф — это образ, который каким-то образом связан с этим символом. Это отношение довольно сложное, потому что char может соответствовать нескольким глифам: т. е. акцентам. А глиф может соответствовать многим символам: т. е. лигатурам, где -> представляется как одно изображение.
Для получения индекса глифа, соответствующего символу, мы используем FT_Get_Char_Index . Как вы можете понять, это предусматривает сопоставление символов и глифов только один к одному. В будущей статье из этой серии мы решим проблему с помощью библиотеки HarfBuzz.
Загрузка глифа из face
Получив glyph_index, мы можем загрузить соответствующий глиф из нашего face.
В будущей части мы подробно обсудим различные флаги загрузки и то, как они позволяют использовать такие функции, как хинтинг и растровые шрифты.
Отображение глифа в его контейнере (glyph slot)
Теперь мы можем, наконец, отобразить наш глиф в его контейнере (слоте), указанном в face->glyph .
Флаги рендеринга мы тоже обсудим в будущем, потому что они позволяют использовать LCD- (или cубпиксельный) рендеринг и сглаживание оттенков серого (grayscale antialiasing).
Вывод символа в консоль
Растровое изображение отрисованного глифа можно получить из face->glyph->bitmap.buffer , где оно представлено в виде массива беззнаковых значений char, поэтому его значения находятся в диапазоне от 0 до 255.
Буфер возвращается в виде одномерного массива, но представляет собой 2D-изображение. Чтобы получить доступ к i-ой строки j-го столбца, рассчитываем column * row_width + row , как в bitmap.buffer[i * face->glyph->bitmap.pitch + j] .
Вы можете видеть, что при доступе к массиву мы использовали bitmap.width в цикле и bitmap.pitch , потому что длина каждой строки пикселей равна bitmap.width , но «ширина» буфера составляет bitmap.pitch .
В следующем коде перебираются все строки и столбцы, а в зависимости от яркости пикселя рисуются разные символы.
→ Полный код можно посмотреть здесь
Заключение
Мы создали базовый рендерер символов в консоли. Этот пример может (и будет) расширен для рендеринга символов в текстуру OpenGL для поддержки эмодзи, субпиксельного рендеринга, лигатур и многого другого. В следующей части поговорим о субпиксельном сглаживании LCD по сравнению с оттенками серого, их плюсах и минусах.
Источник
Делаем красивые шрифты с новым freetype2 в Linux
Итак, друзья, в моей жизни произошло поворотное событие. Эта своеобразная точка бифуркации, сулила мне или отказ от старого, удобного и привычного инструмента — infinality, в угоду новому freetype2, который, по моему мнению, не компенсировал все возможности infinality, или инерционное поедание кактуса со старым инструментом — infinality или вообще послать все эти ваши линупсы и уйти в ubuntu.
Началось всё с того, что в Manjaro Linux перестали работать репозитории bohoomil, собственно из которых, мною ставились патченные freetype2-infinality, fontconfig-infinality и cairo-infinality. И всё бы ничего, но с недавним обновлением в KDE, иксы отказывались стартовать, как выяснилось по причине несовместимости новых пакетов harfbuzz и harfbuzz-ico с патченными infinality файлами. Первым решением было заморозить обновление harfbuzz и harfbuzz-ico в /etc/pacman.conf, но со временем я понял, что это лишь временное решение и нельзя игнорировать проблему вечно.
Так же рекомендую прочитать статью продолжающую мой цикл о линукс под названием: Linux mint 19 Tara системные требования (Xfce, Cinnamon, Mate)
В поисках решения перечитал множество различных ресурсов и википедий, выбрав для себя алгоритм замены infinality на стандартный freetype2. Оисанное ниже в первую очередь подходит для Arch-based дистрибутивов, но при желании легко реализуется и в других дистрибутивах, с некоторыми отличиями лишь в установочных командах.
Первым делом ставим freetype2, соглашаясь на удаление infinality патченных версий, если у вас таковые были установленны, если нет, то пропускаем это шаг(если установлены ubuntu патчи, то тоже выполняем этот шаг):
Далее устанавливаем нужные, для приведения к красивости, шрифты:
В двух словах опишу что это за шрифты:
- ttf-croscore — шрифты из ChromeOS, они метрически совместимы с MS шрифтами, и уж точно не хуже их выглядят, содержат Arimo, Tinos, Cousine и прочие.
- ttf-dejavu и ttf-liberation — базовые шрифты в Manjaro, и есть по умолчанию, насколько я знаю в любом DE, если ошибаюсь исправьте в комментариях.
- ttf-carlito — метрически совместим с MS Calibri
- ttf-caladea — метрически совместим с MS Cambria
Ну и теперь переходим к самому важному шагу, выбираем метод рендеринга шрифтов. Начиная с freetype2 версии 2.7 появились следующие варианты:
- truetype:interpreter-version=35 # Classic mode (используется по умолчанию в freetype2 — 2.6)
- truetype:interpreter-version=38 # Infinality mode (более кастомизируемая настройка использует встроенные Infinality патчи)
- truetype:interpreter-version=40 # Minimal mode (используется по умолчанию в freetype2 — 2.7)
Меняется это редактированием выполнив команду:
Меняем нижнюю строку делая ее раскомментированной:
Да-да, тем самым мы выбрали infinality мод. Дефолтный вариант тоже не плох, можете попробовать, хотя в нём полностью игнорируются все инструкции горизонтального сглаживания и нет никакого субпиксельного сглаживания.
Теперь создаём и редактируем файл настроек, это мои настройки, опытным путём приведённые к понравившемуся мне виду, все параметры имеют комментарии, меняйте на своё усмотрение:
Приводя его к виду:
приводим к виду:
После чего заставляем xrdb прочесть наш конфиг:
Если используете Gnome, Mate, Cinnamon, Budgie, то измените в настройках сглаживание с grayscale на RGBa. После всего проделанного перезагружаемся или просто убиваем иксы ctrl+alt+backspace.
Принципиально не буду приводить то, как выглядят шрифты у меня, во первых потому, что сколько не сомтрел скрины в интернетах, мне всегда не нравится как выглядит, а когда делаю тем же способом, то на моём мониторе выглядят пристойно, потому дабы не отпугивать вас, просто делайте и настраивайте. А во вторых, у всех свои вкусы, и многим мои скрины придутся не по нраву, а моя неокрепшая психопатическая сущность, начнёт грубить в ответ, посему — хотите попробовать мои настройки пробуйте, если у вас не получается довести до приемлемого, лично вам, внешнего вида, значит кривизна ваших рук, имеет принципиальное не соответствие с кривизной вашей системы, старайтесь и у вас получится Ищущий да обрящет.
Источник
How to Install FreeType 2.8 in Ubuntu 16.04, 17.04
FreeType, a freely available software library to render fonts, has reached the 2.8 release. Here’s how to install it via PPA in Ubuntu.
FreeType 2.8 features complete support for CFF2 and OpenType Variation Fonts, a new function `FT_Face_Properties’, 25 more scripts added to the auto-hinter, and various fixes.
Changes between FreeType 2.7.1 to 2.8.0:
- Support for OpenType Variation Fonts is now complete.
- A new function `FT_Face_Properties’ allows the control of some module and library properties per font
- Support for following more scripts added to the auto-hinter:
- Adlam, Avestan, Bamum, Buhid, Carian, Chakma, Coptic, Cypriot, Deseret, Glagolitic, Gothic, Kayah, Lisu, N’Ko, Ol Chiki, Old Turkic, Osage, Osmanya, Saurashtra, Shavian, Sundanese, Tai Viet, Tifinagh, Unified Canadian Syllabics, Vai
- `Light’ auto-hinting mode no longer uses TrueType metrics for TrueType fonts.
- And see more here.
Install FreeType 2.8 via PPA in Ubuntu:
Stefan Glasenhardt’s PPA has built the 2.8 release for Ubuntu 16.04, Ubuntu 17.04, and their derivatives.
1. To add the PPA, open terminal (Ctrl+Alt+T) and run command:
Type in your password (no visual feedback due to security reason), read the ppa description and hit Enter.
2. Then you can upgrade the FreeType library via Software Updater:
Or install it via commands in terminal:
To restore the FreeType library to the stock version in your Ubuntu main repository, purge the PPA via command:
Or you can remove PPA, which does not affect installed FreeType2 library, via Software & Updates utility Other Software tab.
Источник
FreeType-2.11.0
Introduction to FreeType2
The FreeType2 package contains a library which allows applications to properly render TrueType fonts.
This package is known to build and work properly using an LFS-11.0 platform.
Package Information
Download MD5 sum: f931582653774e310ed3a7e49b7167a3
Download size: 2.2 MB
Estimated disk space required: 30 MB (with additional documentation)
Estimated build time: 0.2 SBU (with additional documentation)
Additional Downloads
Additional Documentation
Download MD5 sum: c61af913d48e89566c99cddfb8e4c158
Download size: 2.0 MB
FreeType2 Dependencies
Recommended
HarfBuzz-3.0.0 (first, install without it, after it is installed, reinstall FreeType-2.11.0), libpng-1.6.37, and Which-2.21
Optional
Optional (for documentation)
Installation of FreeType2
If you downloaded the additional documentation, unpack it into the source tree using the following command:
Install FreeType2 by running the following commands:
This package does not come with a test suite.
Now, as the root user:
If you downloaded the optional documentation, install it as the root user:
Command Explanations
sed -ri . : First command enables GX/AAT and OpenType table validation and second command enables Subpixel Rendering. Note that Subpixel Rendering may have patent issues. Be sure to read the ‘Other patent issues’ part of http://www.freetype.org/patents.html before enabling this option.
—enable-freetype-config : This switch ensure that the man page for freetype-config is installed.
—without-harfbuzz : If harfbuzz is installed prior to freetype without freetype support, use this switch to avoid a build failure.
—disable-static : This switch prevents installation of static versions of the libraries.
Источник
Как установить freetype linux
Библиотека сайта rus-linux.net
На главную -> MyLDP -> Электронные книги по ОС Linux
Beyond Linux From Scratch. Version 2011-12-30 | ||
Назад | 9. Графические библиотеки и библиотеки шрифтов | Вперед |
Пакет FreeType-2.4.8
Знакомимся с пакетом FreeType2
В пакете FreeType2 находится библиотека, позволяющая приложениям правильно отображать шрифты TrueType.
Известно, что пакет правильно собирается и работает на платформе LFS-7.0.
Информация о пакете
- Загрузка (HTTP): http://downloads.sourceforge.net/freetype/freetype-2.4.8.tar.bz2
- Загрузка (FTP): ftp://mirror.ovh.net/gentoo-distfiles/distfiles/freetype-2.4.8.tar.bz2
- Контрольная сумма MD5: dbf2caca1d3afd410a29217a9809d397
- Размер загружаемого пакета: 1,4 MB
- Оценочный размер требуемого дискового пространства: 41 MB (включая установку дополнительной документации)
- Оценочное время сборки: 0,3 SBU
Дополнительные загрузки
Дополнительная документация
- Загрузка (HTTP): http://downloads.sourceforge.net/freetype/freetype-doc-2.4.8.tar.bz2
- Загрузка (FTP): ftp://mirror.ovh.net/gentoo-distfiles/distfiles/freetype-doc-2.4.8.tar.bz2
- Контрольная сумма MD5: 538c925059e90be23928b454c14df728
- Размер загружаемого пакета: 105 KB
Установка пакета FreeType2
Если вы скачали дополнительную документацию, распакуйте ее в дерево с исходными кодами с помощью следующей команды:
Установите пакет FreeType2 с помощью следующих команд:
В этом пакете набор тестов отсутствует.
Теперь в роли пользователя root выполните:
Пояснение команды
sed -i -r ‘s:.*(#.*SUBPIXEL.*) .*:\1:’ include/freetype/config/ftoption.h: Эта команда позволяет оптимизировать изображение, выдаваемое на экран LCD. Эта настройка приводит в результате к улучшению отображения шрифтов, но может иметь патентные ограничения. Прежде, чем включить эту настройку, не забудьте прочитать раздел «Other patent issues» («Другие вопросы, касающиеся патентов») на странице http://www.freetype.org/patents.html .
Описание пакета
Установленные программы: freetype-config
Установленные библиотеки: libfreetype.
Установленные директории: /usr/include/freetype2 и /usr/share/doc/freetype-2.4.8
используется для получения информации о шрифтах FreeType, используемой при компиляции и компоновке
содержит функции рендеринга различных типов шрифтов, например, TrueType и Type1
Перевод сделан с варианта оригинала, датированного 2011-12-09 03:40:04 +0000
Источник