Xpoint
   [напомнить пароль]

Ширина букв шрифта?

Метки: [без меток]
2006-11-18 13:37:36 [обр] Иван FXS[досье]
Можно ли где-то находить/узнавать ширины (в пикселях) различных букв шрифта (Arial или Times New Roman, скажем), не "измеряя их линейкой"?
спустя 45 минут [обр] Алексей В. Иванов(5/2861)[досье]
Вы же можете написать манюсенький JS, который померит ширину всех букв, используя innerHTML и offsetWidth. Только зачем?
спустя 42 минуты [обр] Иван FXS[досье]

Зачем - чтобы проектировать внешний вид страницы (конкретно - таблицы).

Только мой вопрос был НЕ о том, как определять это В БРАУЗЕРЕ (JS); наверное, поэтому Вы его и восприняли привратно ...

спустя 5 часов [обр] Евгений Петров(0/1055)[досье]
Иван FXS[досье] Вам в типографику - есть вполне определенные соотношения ширины и высоты букв для разных шрифтов (типов шрифтов).
спустя 12 минут [обр] Иван FXS[досье]

Вообще-то речь не про моношириные шрифты ... то есть у каждой буквы будет свое соотношение.

Кроме того, мне интересны не сами буквы, а "место" занимаемое ими в строке, чтобы - зная конкретный набор букв в слове - расчитать, сколько пикселей займет слово на экране.

спустя 54 минуты [обр] Алексей В. Иванов(5/2861)[досье]
А я и не говорю про разработку "под браузер". Я просто предлагаю Вам исключительно простой способ получить массив значений.
И всё-таки... Вы в какую программу буквы вставляете?
спустя 1 час 51 минуту [обр] Иван FXS[досье]
Я (кодо-)генерирую HTML-таблицы
спустя 1 день [обр] Евгений Петров(0/1055)[досье]
Иван FXS[досье] Я тоже не про моноширинные шрифты речь вел (тем более, соотношения ширины/высоты и кернинга для разных шрифтов отличаются). IMHO в вашем случае узнать реальную ширину слова можно только после рендеринга текста браузером.
спустя 2 часа 5 минут [обр] Иван FXS[досье]
нууу ... не может же она быть настолько непредсказуема!?
спустя 8 часов [обр] Thirteensmay(0/157)[досье]
Иван FXS[досье] Вы хотите сказать что никогда в это не поверите ? ;) - Тогда попробуйте. Дело в том что разные алгоритмы рендеринга работают в разных условиях и на различном железе, вылезает разница. Ярчайший пример - рендеринг под разную разрешающую способность, в этом случае вылезает принципиальная разница точности при делениях, а уж когда сами делители разной точности, да еще и по разным алгоритмам работают, короче надеюсь Вы поняли... Это с практической точки зрения. С теоретической же все прекрасно ;) Каждый символ в шрифте имеет свой четко определяемый размер, высота определяется размером шрифта, типом символа и отступами с этим типом связанными, длина указывается отдельно для каждого символа, указывается она в однотысячных единицах относительно размера шрифта, т.е. длина символа = 500 означает что при размере шрифта = 10pt длина этого символа будет равна 5pt. Длины символов в шрифте можно посмотреть в какой нибудь программе работы со шрифтами, либо поступить еще проще, набрать какой нибудь документ всеми символами шрифта, а потом сконвертировать его в нежатый PDF, тогда простым текстовым редактором можно открыть этот PDF и посмотреть на массив длин символов - как только увидите строку типа: /Type /Font /Widths [860, 992, 1002, 600, 860 ... - так это оно ;)
Но сразу же Вас разочарую, не стоит так вообще делать. Проблема в том что теория не определяет расстояние между символами, точнее определяет, но кучей разных способов, тут уже не все так очевидно, и начинают использоваться разные хитрые умолчания. Более того, Вы не можете быть уверенны что вывод Вашего контента будет производиться именно тем шрифтом который Вы указываете, существует множество систем осуществляющих динамическую подстановку шрифта. И пр. и пр. и пр. ;(
спустя 51 минуту [обр] Иван FXS[досье]
Честно говоря, мне не нужно попасть точно пиксель в пиксель, нужно просто более менее учесть (предвосхитить) место, которое займет слово на экране в данном конкретном шрифте ...
спустя 50 минут [обр] Thirteensmay(0/157)[досье]
PrintScreen - PhotoShop - Zoom - Считаем пиксели ;)
спустя 2 часа 28 минут [обр] Ярослав Сюзёв (yara)(0/305)[досье]
М Перенесено из форума "Интернет::HTML-верстка::Верстка"
спустя 9 часов [обр] LookeR(5/1069)[досье]

Если мне не изменяет память, то место, занимаемое символом определяется кегельной площадкой. http://www.fonts.ru/help/term/terms.asp?code=41

Другое дело, что на компе это понятие убивается кернингом, т.н. кернинговыми парами и пр. нюансами.

Поэтому в "компьютерных" шрифтах есть метрики...
http://www.fonts.ru/help/term/terms.asp?code=222

Продолжаем поиски по запросу "метрики шрифтов"...
Вот, яндекc сразу шлет к мелкософту:
http://msdn.microsoft.com/libr......ing_font_metrics_usecsharp.asp

спустя 30 минут [обр] Иван FXS[досье]

Thirteensmay[досье] кстати, насчет print screen, может кто-нибудь мне объяснить, почему:
делаю файл
<HTML><HEAD><TITLE></TITLE></HEAD><BODY>

<SPAN style="font-size:40">BBB</SPAN>
<SPAN style="font-size:20">BBB</SPAN>
<SPAN style="font-size:10">BBB</SPAN>

</BODY></HTML>
- открываю в браузере, print screen, вставляю в Paint, считаю в пикселях высоты букв ... и они оказываетя 27, 13 и 7 пикселей, а никака не 40, 20 и 10?

А еще - если я наберу "BBB" 40-м шрифтом в MS Word и установлю масштаб 100% (ведь в Ворде можно управлять "масштабом", а в IE, например, - нет), то буквы в Ворде будут заметно больше, чем аналогичные (сороковые) буквы в соседнем окне IE ...

Повторив - с вордовыми сороковыми - операцию printscreen + Paint убеждаюсь, что высота 40-й буквы в Ворде - тоже не 40 пикселей, а 35 ...

В общем, совсем запутался: что же означает число 40 в показателе размера шрифта?

LookeR[досье]"определяется кегельной площадкой" - то есть у 40-го шрифта "40" - это высота кегельной площадки?

спустя 10 часов [обр] LookeR(5/1069)[досье]
"40 кегль" - высота кегельной площадки, а буква может быть в её пределах и больше и меньше (по сравнению с аналогичным кеглем другой гарнитуры).
спустя 9 минут [обр] LookeR(5/1069)[досье]
Если же Вы даёте размер шрифта в pх, то расхождений (по крайней мере больших) быть не должно, НМВЗ...
НО в пикселях не работает ни word, ни сам IE (который, кстати, имеет масштабирование шрифтов). И потом скриншоты - некорректное сравнение. Экранные шрифты и печатные - различаются.
спустя 1 минуту [обр] Thirteensmay(0/157)[досье]

Иван FXS[досье]

Может кто-нибудь мне объяснить, почему: "font-size:40", "font-size:20" = 27, 13 пикселей, а сороковой шрифт в Word - 35 пикселей, что же означает число 40 в показателе размера шрифта ?

- Потому что Вам уже сказали - разные алгоритмы рендеринга, разные описания шрифтов (со своими особенностями, сдвигами точек отсчета, отступами и пр.), разные единицы измерений, и пр. и пр. В конечном счете ведь никто Вам не гарантировал что у Вас будет один в один как Вы указываете, Word, браузер и пр. это не прецизионная типография, они рассчитаны на максимальную совместимость, а при таком условии надеюсь сами понимаете разница неизбежна. Шрифт в Word указывается вообще в т.н. типографских точках (pt, пунктах) - 1/72 дюйма, пиксели тут не при чем. Что же означает показвтель размера шрифта ? - ну, начнем с того что для разных шрифтов - разное. Для большинства векторных шрифтов это просто безразмерный коэффициент масштабирования, но в прикладных программах это уже пересчитывается в размерные единицы (в зависимости от разрешения полотна на которое осуществляется вывод), чаще всего это теже pt, но могут быть mm, пиксели и пр. Коэфф. масштабирования (множитель) это число на которое умножается начальное векторное описание символа для достижения необходимого размера, т.е. например изначально для символа описано что длина верхней палки у буквы "Г" равна 0.8, и нам надо вывести эту букву на некоторый носитель у которого разрешение = 10 пикселей/мм, так чтобы размер буквы был = 7 мм. В этом случае рассчет прост: на один мм у нас приходится 10 пикселей, нам надо 7 мм, значит выводим букву размером 70 пикселей, а палка у нее будет 70 * 0.8 пикселей. Надеюсь после того как Вы это осмыслите станет понятно, что размер символа это относительная, прикладная вещь, и то как он связан с коэффициентом масштабирования начального векторного описания символа. Да, с некоторым упрощением можно сказать что размер шрифта это размер кегельной площадки (см. рисунок ниже). Но заметьте, не высота или длина кегельной площадки, а именно ее размер (диагональ), определяемый в конечном счете коэффициентом масштабирования (множителем). Да, в теории если Вы указываете font-size:40px, то длина гипотенузы (диагонали) кегельной площадки должна быть 40 пикселей, а высота самой большой буквы в шрифте соответственно теореме Пифагора (нижний катет, (длина) известен) - элементарно вычисляется. Пифагора надеюсь слышали, цитировать не буду. Это все конечно упрощение для понимания, на самом деле в шрифте для этих целей хранится сразу готовая таблица косинусов, впрочем тоже от типа шрифта зависит. Т.е. в Вашем случае при размере шрифта 40px, высота самой большой буквы будет чтото около 30..38 пикселей, зависит от пропорций самого символа, отнимите от этого отступы (размеры букв в шрифте не одинаковы, см. рисунок ниже), а также учтите погрешности растеризации, получите результат ;)

спустя 11 минут [обр] Иван FXS[досье]

Thirteensmay[досье]
"если Вы указываете font-size:40px, то длина гипотенузы (диагонали) кегельной площадки должна быть 40 пикселей, а высота самой большой буквы в шрифте ... будет чтото около 30..38 пикселей, зависит от пропорций самого символа"

- Вы хотите сказать, что заглавные буквы одного шрифта - например, W и I, - должны отображаться разной высоты???

спустя 59 минут [обр] Thirteensmay(0/157)[досье]
Нет конечно, просто я хотел объяснить взаимосвязь между коэффициентом масштабирования начального векторного описания символа и понятием размера шрифта, т.к. именно от этого коэффициента размер напрямую и зависит. Другое дело, что на практике эта прямая зависимость выражается через косвенную, т.е. размер шрифта указывается по катету (кеглю, высоте), далее рассчитывается соответствующий коэффициент масштабирования, на основе которого в конечном счете и идет рендеринг.
спустя 24 минуты [обр] Иван FXS[досье]
Так все-таки - какое резюме:
высота 27 (экранных) пикселей у <SPAN style="font-size:40px">BBB</SPAN>
- это баг или фича?
спустя 1 час 28 минут [обр] Thirteensmay(0/157)[досье]
сообщение промодерировано
Если буква "B" в шрифте почти полностью заполняет кегельную площадку то скорее баг, т.к. в этом случае при font-size:40px высота буквы должна быть около 38 пикселей. Если же "B" располагается гдето посередине площадки, для того чтобы оставить место под точки у буквы Ё и под хвосты у Q, а также еще и отступы от них до края, то сами понимаете вполне может быть даже не фича а вообше идеально. Тот же юникодный Times New Roman из Windows (исп. по умолчанию) содержит описание многих символов с такими хвостами и надстройками. Сравните символы с кодами 0042 и 2560 - думаю будет понятно. А еще сами прикиньте, разработчиков практически заставили скрестить слона и трепетную лань (рендеринг под разные разрешения, типы шрифтов, так чтобы домохозяйка разобралась, так чтобы повторное использование кода, чтобы на существующей базе, и пр. и пр.). В результате такого скрещивания получился ежик, баг это или фича ?
спустя 45 минут [обр] Thirteensmay(0/157)[досье]
<SPAN style="font-size:40px">&#0066;&#9568;</SPAN>
спустя 24 минуты [обр] Иван FXS[досье]
Спасибо, все встало на свои места!
Powered by POEM™ Engine Copyright © 2002-2005