Как я могу измерить объем текста на экране веб-браузера с помощью PHP (во время сервера)? - PullRequest
2 голосов
/ 20 апреля 2011

Мне нужно хранить в базе данных фрагменты текста и размер слоя, который будет оборачивать текст на экране браузера (я не могу построить слой на стороне клиента - это требование проекта). Весь фрагмент текста должен правильно вписаться в квадратный слой. Пользователи смогут использовать различные размеры шрифтов и семейства шрифтов из небольшой группы параметров, и мы будем знать, какой выбор будет сделан во время вычисления.

Прямо сейчас я вычисляю объем слоя, основываясь на теории, что каждый размер символа - это высота пикселей размера шрифта и 50% ширины размера шрифта. Со значением 50% я получил наилучшее приближение для средних случаев, но это все еще не очень хорошее решение, потому что оно обрезает фрагменты текста или оставляет слишком много пустого пространства в конце. И это даже хуже с некоторыми более широкими шрифтами.

Есть идеи, как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

Учитывая требования, единственный способ сделать это на 100% гарантированно:

Рендеринг изображения на сервере - это может быть обычное изображение, векторформат, такой как SVG, или даже (более экстремальный) для Flash - и использует сгенерированный вывод на клиенте в некоторой форме, которая гарантирует точную визуализацию , так как любые проблемы рендеринга CSS / локального шрифта могут отличатьсяиз сгенерированных сервером значений и, таким образом, является ненадежным!

Точные размеры окна, таким образом, известны независимо от локальных проблем рендеринга шрифтов, поскольку они зависят только от "представления" серверов.

Счастливого кодирования.

1 голос
/ 20 апреля 2011

Учитывая, как легко пользователям переопределить выбор шрифта в браузере, в лучшем случае это будет всего лишь попытка «наилучшего предположения», но вы можете использовать GD для рисования текста, а затем вычислить ограничивающий прямоугольник для него, используя imagettfbbox () .

Но это поддерживает только простой текст, поэтому, если вы делаете "сложные" вещи жирным шрифтом / курсивом, переменными размерами и т. Д., То вы по большей части SOL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...