Ещё раз про шрифты

14 views
Skip to first unread message

ioctl

unread,
Mar 1, 2020, 3:29:31 AM3/1/20
to mapsoft2
Вот что удалось найти по шрифтам:
 
1) Если не сказано иное, то размер шрифта указывается в пунктах (pt), то есть, 1/72 дюйма, см. https://www.w3.org/Style/Examples/007/units.en.html .
Можно сравнить следующие картинки:
 
pango-view --hinting=full --dpi=200 --font="DejaVu Sans 9" -t "1. Горизонтальный и наклонный текст на карте"
pango-view --hinting=full --dpi=100 --font="DejaVu Sans 9" -t "1. Горизонтальный и наклонный текст на карте"
 
Видно, что размер в пикселях отличается в 2 раза, так как freetype думает, что у устройств разный DPI.
Во freetype есть возможность задавать размер непосредственно в пикселях (px):
 
pango-view --hinting=full --pixels --font="DejaVu Sans 9" -t "1. Горизонтальный и наклонный текст на карте"
 
Итого, если надо задать размер в миллиметрах (а точнее 1/72 дюйма), то следует использовать pt и правильный dpi, если в точках, то px.
 
2) Как оказалось, смазанная картинка по горизонтали это не баг, а фича -- так специально задумано. Для отключения можно задать переменную среды FREETYPE_PROPERTIES="truetype:interpreter-version=35" . Сейчас актуальна версия 40. Картинки:
 
FREETYPE_PROPERTIES="truetype:interpreter-version=35" pango-view --hinting=full --font="DejaVu Sans 9" -t "1. Горизонтальный и наклонный текст на карте"
FREETYPE_PROPERTIES="truetype:interpreter-version=40" pango-view --hinting=full --font="DejaVu Sans 9" -t "1. Горизонтальный и наклонный текст на карте"
 
Вторая менее чёткая, но как будто бы не хуже. Наверно, это надо пробовать на печати. Возможно, для печати и экранов оптимальными являются разные режимы.
 
3) Примеры вращения можно посмотреть параметром --rotate:
 
pango-view --hinting=full --font="DejaVu Sans 9" -t "1. Горизонтальный и наклонный текст на карте" --rotate -45 &
pango-view --hinting=full --font="DejaVu Sans 9" -t "1. Горизонтальный и наклонный текст на карте" --rotate -30 &
pango-view --hinting=full --font="DejaVu Sans 9" -t "1. Горизонтальный и наклонный текст на карте" --rotate -15 &
pango-view --hinting=full --font="DejaVu Sans 9" -t "1. Горизонтальный и наклонный текст на карте" --rotate 0 &
pango-view --hinting=full --font="DejaVu Sans 9" -t "1. Горизонтальный и наклонный текст на карте" --rotate 15 &
pango-view --hinting=full --font="DejaVu Sans 9" -t "1. Горизонтальный и наклонный текст на карте" --rotate 30 &
pango-view --hinting=full --font="DejaVu Sans 9" -t "1. Горизонтальный и наклонный текст на карте" --rotate 45 &
 
4) Если есть такая потребность, шрифты по тегам или именам можно поискать и посмотреть тут:
 
Мне очень понравились шрифты Paratype: https://www.1001fonts.com/search.html?search=paratype&x=0&y=0
Шрифты разработаны серьёзной конторой специально для печати: http://rus.paratype.ru/pt-sans-pt-serif
Тексты выглядят немного компактнее, чем с DejaVu Sans.
 
5)  Если не стоит задача полной повторяемости картинок, лучше не указывать конкретный шрифт (DejaVu Sans), вместо этого просто писать гарнитуру (Sans), тогда fontconfig выберет наиболее подходящий для заданных параметров ( см. /etc/fonts/conf.d). Посмотреть текущий приоритет выбора шрифтов:
fc-match --all "Sans" | head
Посмотреть/проверить параметры заданной строки :
fc-match -v "Sans 9:hintfull"
 
 
Алексей

slazav

unread,
Mar 1, 2020, 5:22:57 AM3/1/20
to mapsoft2
Напишу, что я хочу от шрифтов для карты:
- Прежде всего я хочу делать растровую карту с неким фиксированным масштабом, например, 1:50'000.
- Рендерить ее хочется с неким "достаточным" разрешением, например 200dpi. (Ну или плитками уровня 13-14)
- При желании ее можно рендерить крупнее или мельче, но без замены шрифтов, поскольку, если их размер будет меняться, то, вообще говоря, подписи придется переставлять.
- Размер объектов и шрифтов должен быть "равномерно-плотным" и соответствовать масштабу карты. Например, если мы ужмем карту до 150 dpi - по все еще должно хорошо читаться, а если до 100dpi - то должно быть уже на грани. 

Поэтому правильный тест, наверное, должен быть таким: рендерим карту в родном разрешении, уменьшаем в два раза и проверяем, что все читается, но уже "на грани".
Разумеется, никто не запрещает рендерить карту в других проекциях и масштабах. И можно будет придумывать разные штуки, как такие рендеры можно упрощать или улучшать. Но мне это кажется, не первоочередной (и не слишком решаемой, и не слишком полезной) задачей - все равно я пользуюсь только одной картинкой и вряд ли буду поддерживать другие.

Примеры:

Английская карта.
Карта одна, она уменьшается/увеличивается. На более мелких масштабах возникает уже совсем другая карта. Впрочем, самая подробная карта на мой вкус слишком уж крупномасштабная: ее надо печатать как минимум, как 250-метровку и, чтобы сходить даже в однодневный поход, приходится печатать слишком много листов. Чаще всего я печатаю более мелкую карту (масштаб плиток 14) как 500-метровку. Она тоже неплохая, но приходится смириться, что многие полезные объекты теряются.
(Обратите, кстати, внимание, как народ "играет со шрифтами": использует "римский" шрифт для римских исторических объектов и готический - для не-римских)

Норвежская карта. Есть два карты, "бумажная" и "векторная":
В "векторной" ставится красивый шрифт под разрешение экрана, напечатать такое хорошо практически невозможно
В "бумажной" есть хороший родной масштаб (плитки 13,14 и далее), а все более мелкие масштабы имеют свои шрифты, свои наборы объектов, явно генерятся автоматически и не слишком полезны. Масштаб плиток 14 можно печатать как 500-метровку, и это мне очень нравится. То есть, карта меня вполне устраивает, хотя, кажется, плотность объектов и подписей можно было бы сделать и побольше (но это, наверное, потому что я использовал эту карту только на "неплотные" малонаселенные места).

Финская карта:
Раньше они практиковали "английский" подход с тремя, кажется, родными масштабами (и карта у них была в своей поперечно-цилиндрической проекции), теперь сместились к генерации мелких масштабов из крупного (и перешли на гуглоплитки). При этом самая крупная карта - масштаб плиток 15, ее надо печатать, как минимум, как 250-метровку. Со следующим масштабом, который можно печатать как 500-метровку и который я всегда использовал, происходили разные чудеса. Раньше он был очень хороший, плотный и со всеми нужными объектами. Потом его стали автоматически генерить из более крупного масштаба, убирая часть объектов (все тропинки, например) и мне приходилось печатать старую карту из кэша. Теперь, кажется, тропинки вернулись, и, может, он опять хорош - тогда это будет пример неплохой автоматической генерализации карты.

ioctl

unread,
Mar 1, 2020, 6:36:00 AM3/1/20
to mapsoft2
Прошу уточнить требования.
 
1) Например, у нас на бумажной карте с масштабом 1:50'000 и DPI 200 есть буква 'Н', она имеет четыре внешних угла, этим углам соответствуют некоторые географические координаты. Теперь мы печатаем на бумаге ту же карту с тем же масштабом но с DPI 100. Географические координаты углов не должны меняться, так?
 
Иными словами, должна ли меняться геометрия надписей относительно других объектов при изменении DPI?
 
2) Векторные карты по ссылкам при смене масштаба или меняют размер надписей "в сантиметрах"/сохраняют "в координатах", или наоборот  меняют размер в "в координатах"/сохраняют "в сантиметрах".
 
Я так понимаю, первые можно считать "бумажными", вторые "векторными".
Английская карта на разных приближениях делает то так, то так.
 
Какое поведение предполагается в mapsoft2?
 
 
01.03.2020, 13:23, "slazav" <vl.za...@gmail.com>:
--
You received this message because you are subscribed to the Google Groups "mapsoft2" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mapsoft2+u...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/mapsoft2/53203a7f-3ec4-4747-87e6-d463a7928741%40googlegroups.com.

slazav

unread,
Mar 1, 2020, 7:13:03 AM3/1/20
to mapsoft2
> 1) Например, у нас на бумажной карте с масштабом 1:50'000 и DPI 200 есть буква 'Н', она имеет четыре внешних угла, этим углам соответствуют некоторые географические координаты.
> Теперь мы печатаем на бумаге ту же карту с тем же масштабом но с DPI 100. Географические координаты углов не должны меняться, так?

Да, так.
 
> Иными словами, должна ли меняться геометрия надписей относительно других объектов при изменении DPI?

То есть, конечно, можно делать все что угодно, но мне пока было бы удобно иметь и поддерживать одну фиксированную картинку, оптимизированную для 1:50'000 200dpi (или даже 1:100'000 для некоторых горных хребтовок). Основной смысл появления mapsoft2, чтобы это не было жестко зашито в код, а при желании можно было бы реализовать и другие идеи (если кому-то вдруг захочется).

> Я так понимаю, первые можно считать "бумажными", вторые "векторными".
> Английская карта на разных приближениях делает то так, то так.

В английской карте всего две принципиально разные картинки.

ioctl

unread,
Mar 2, 2020, 4:11:16 AM3/2/20
to mapsoft2
Значит для разных DPI и одного масштаба надо использовать пункты, то есть, в этом плане ничего не менять.
По результатам исследований предлагаю оценить следующий способ запуска отрисовки:
 
FREETYPE_PROPERTIES=truetype:interpreter-version=35 ./make
Конфиги и результаты в файлах.
 
Paratype Sans явно лучше DejaVu Sans -- и компактнее, и чётче.
У PT есть ещё уширенный и зауженные шрифты, также есть чуть улучшенный шрифт Expert, но он не вполне свободный.
 
 
01.03.2020, 15:13, "slazav" <vl.za...@gmail.com>:
--

You received this message because you are subscribed to the Google Groups "mapsoft2" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mapsoft2+u...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/mapsoft2/2ed4c64c-9432-4859-a44e-460cbc3661a3%40googlegroups.com.
render18.cfg
render18.png

slazav

unread,
Mar 2, 2020, 5:28:02 AM3/2/20
to mapsoft2
Да, Paratype мне вполне нравится.
Кажется, мне осталось придумать, как реализовать сетку и разные подписи на рамке карты - и можно будет переключить рендер карт на mapsoft2.
С плитками я тоже пока не игрался, надо бы это сделать.

А дальше - самое сложное, понять, как правильно эти карты рисовать и редактировать:)

slazav

unread,
Mar 2, 2020, 5:37:26 AM3/2/20
to mapsoft2
Кстати, очень похоже, что у меня в старых картах и был Paratype. Там использовался шрифты sans/serif по умолчанию, и от Altlinux вполне можно было ожидать, там так и было настроено.

ioctl

unread,
Mar 2, 2020, 6:07:40 AM3/2/20
to mapsoft2
Да, это было бы логично. Только вчера понял, что у меня были далеко не самые лучшие для русского языка шрифты по умолчанию в системе.
 
Теоретически, шрифты можно положить прямо в проект mapsoft2.
Или пытаться скачать их при сборке, как и модули (тогда можно будет использовать PT Expert).
 
02.03.2020, 13:37, "slazav" <vl.za...@gmail.com>:
Кстати, очень похоже, что у меня в старых картах и был Paratype. Там использовался шрифты sans/serif по умолчанию, и от Altlinux вполне можно было ожидать, там так и было настроено.

 

--

You received this message because you are subscribed to the Google Groups "mapsoft2" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mapsoft2+u...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/mapsoft2/8f779efc-6d61-4251-af08-d3b26430bfbe%40googlegroups.com.

slazav

unread,
Mar 2, 2020, 8:48:08 AM3/2/20
to mapsoft2
> Теоретически, шрифты можно положить прямо в проект mapsoft2.
> Или пытаться скачать их при сборке, как и модули (тогда можно будет использовать PT Expert).

Мне кажется, mapsoft должен предоставлять возможность использовать любой шрифт. Это иструмент, который хочется отделить от конкретных карт. Даже "карты", как набор объектов, наверное, ничего не должны про шрифты знать: каждый может поставить разную толщину линий, картинки, шрифты.
Reply all
Reply to author
Forward
0 new messages