imagettftext (): вычислить размер шрифта, чтобы текст соответствовал ширине изображения

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

Как рассчитать размер шрифта по длине текста?

 Brian Warshaw21 мая 2012 г., 18:57
Вы не можете рассчитать размер шрифта по длине текста, если он не является моноширинным шрифтом. И нет хорошего приближения. Строка всех W займет гораздо больше места, чем строка всех I.

Ответы на вопрос(2)

imagettfbbox функция. К сожалению, не существует прямого способа масштабирования, чтобы соответствовать ширине, поэтому вам придется делать это самостоятельно.

Один из способов сделать это - передать текст с размером шрифта по умолчанию, скажем, 20,imagettfbbox и получить ширину от него. Затем вы можете рассчитать размер текста, который должен быть меньше или больше, чтобы он соответствовал нужному размеру, рассчитав коэффициент масштабирования:

scale = targetWidth / bboxWidth;

Затем нарисуйте текст с нужным размером:

fontSize = 20 * scale;

с использованиемimagettftext функция. Таким образом, шрифты совершенно не масштабируются на 100%, но вы получите очень хорошее приближение.

Смотрите документациюimagettfbox Вот.

 Asaf21 мая 2012 г., 19:13
Это отлично работает !! Спасибо!
 30 мая 2017 г., 05:28
помог мне тоже ....
 23 авг. 2012 г., 02:43
Чтобы сделать масштаб на 100% идеальным, вы можете сделать второй проход со шрифтом 40 и рассчитать масштаб на основе разницы между 20 и 40 размерами шрифта для той же входной строки.
while (itsTooBigAccordingToimagettftext() && $fontSize > 0) {
    $fontSize--;
}
 02 авг. 2015 г., 15:39
Предупреждение: делатьcan вызвать длительные задержки, если вы не будете осторожны.
 15 авг. 2014 г., 16:53
Это приведет к & quot; фатальной ошибке: вызов неопределенной функции itsTooBigAccordingToimagettftext () & quot ;. Другими словами, пожалуйста, дайте лучшее объяснение вашего ответа вместо использования полукода :-)
 15 апр. 2015 г., 04:07
Stackoverflow - это место, где вы должны получать руководство, а не полностью рабочий код. Для меня это хорошее руководство, единственная ошибка - читатьitsTooBigAccordingToimagettfbbox() и неitsTooBigAccordingToimagettftext() ;-)

Ваш ответ на вопрос