Я работаю над классом, который может создавать несколько текстовых входов и размещать их друг над другом, чтобы они выравнивались, влево и вправо – вот так:
Проблема в том, что иногда текст неправильно размещен. При рисовании A это работает. При рисовании M (и нескольких других букв с вертикальным штрихом – P, I и т. Д.) Он помещает пробел влево и обрезает предложение справа. Если вы посмотрите на две строки ниже, они должны выровняться идеально, но это не так.
Если вы щелкните правой кнопкой мыши и просмотрите изображения напрямую, проблема будет более очевидной.
Он работает следующим образом:
Моя начальная точка была такая, и я построил этот код:
$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);
а затем все изменения размера, которые работают. Но почему текст выравнивается неправильно?
Решено! Это проблема шрифта, а не проблема GD. Я открыл TrueType-шрифт внутри High-Logic FontCreator и обнаружил, что у нескольких букв есть разделитель слева.
Я использовал функцию в программе под названием «Мастер автоматических метрик», чтобы удалить все символы левого отступа, что было сделано за считанные секунды – и шрифт по-прежнему выглядит приемлемым. Кернинг на буквах вроде j выглядит немного, но это будет сделано.