Intereting Posts
Как установить файлы cookie для uuid CakePHP идентификатор сеанса или другой метод для совместного использования результатов URL – рекомендации приветствуются Отображение онлайн-списка пользователей с помощью PHP Что мне нужно знать о подписях XML для работы SAML? Laravel: Как удалить строки из нескольких таблиц с одинаковым идентификатором только с одним запросом? заменить & for & amp; как написать функцию php внутри функции javascript Изменить запрос sql Мой запрос sql для получения значений средней строки с использованием функции GROUP BY Контроллер Laravel 5, отправляющий целое число JSON в виде строки сопоставление первых двух букв первых двух слов mysql и кодирование Как получить последние видео с нескольких каналов Youtube в одном API-интерфейсе Таблица усечения Mysql, автоматическое увеличение не работает PHP-адрес электронной почты прерван, если контент превышает определенный предел

Раздражающий пробел слева при использовании библиотеки GD и текста

Я работаю над классом, который может создавать несколько текстовых входов и размещать их друг над другом, чтобы они выравнивались, влево и вправо – вот так:

3 линии Проблема в том, что иногда текст неправильно размещен. При рисовании A это работает. При рисовании M (и нескольких других букв с вертикальным штрихом – P, I и т. Д.) Он помещает пробел влево и обрезает предложение справа. Если вы посмотрите на две строки ниже, они должны выровняться идеально, но это не так.

3 линии3 линии

Если вы щелкните правой кнопкой мыши и просмотрите изображения напрямую, проблема будет более очевидной.

Он работает следующим образом:

  1. Создайте пустой холст, поместите текст на нем «практически», чтобы измерить ширину и высоту
  2. Когда размеры получены, создайте холст, соответствующий размерам текста. Теперь у нас есть сцена, например, 800 пикселей в ширину
  3. Уменьшить предложение или слово до 400 пикселей в ширину
  4. Увеличьте y-offset для другого предложения или слова
  5. Повторите то же самое, если у нас есть предложения / слова для отображения

Моя начальная точка была такая, и я построил этот код:

$fontsize = 120; $size = imagettfbbox($fontsize, 0, "./fonts/".$fontname, $text); $xsize = abs($size[0]) + abs($size[2]); $ysize = abs($size[5]) + abs($size[1]); //print_r($size); $image = imagecreate($xsize, $ysize); // Colors $backgroundcolor = imagecolorallocate($image, 255, 255, 255); $textcolor = imagecolorallocate($image, 155, 142, 138); imagettftext($image, $fontsize, 0, 0, abs($size[5]), $textcolor, "./fonts/".$fontname, $text); header("content-type: image/png"); imagepng($image); 

а затем все изменения размера, которые работают. Но почему текст выравнивается неправильно?

Solutions Collecting From Web of "Раздражающий пробел слева при использовании библиотеки GD и текста"

Решено! Это проблема шрифта, а не проблема GD. Я открыл TrueType-шрифт внутри High-Logic FontCreator и обнаружил, что у нескольких букв есть разделитель слева.

Я использовал функцию в программе под названием «Мастер автоматических метрик», чтобы удалить все символы левого отступа, что было сделано за считанные секунды – и шрифт по-прежнему выглядит приемлемым. Кернинг на буквах вроде j выглядит немного, но это будет сделано.