перенос и центрирование текста в gd и php
У меня есть строка текста, которую мне нужно обернуть и центрировать на изображении GD. Я также использую шрифт ttf. Может ли что-нибудь оказать мне некоторую помощь, пожалуйста?
Мне удалось получить некоторый текст для переноса, выполнив следующее, но теперь мне нужно поместить его в центр:
function wrap($fontSize, $angle, $fontFace, $string, $width){
$ret = "";
$arr = explode(' ', $string);
foreach ( $arr as $word ){
$teststring = $ret.' '.$word;
$testbox = imagettfbbox($fontSize, $angle, $fontFace, $teststring);
if ( $testbox[2] > $width ){
$ret.=($ret==""?"":"\n").$word;
} else {
$ret.=($ret==""?"":' ').$word;
}
}
return $ret;
}
3 answers
Для центрирования как по горизонтали, так и по вертикали: получите половину высоты от imagettfbbox всего текста (с новыми строками) и вычитайте его из половины высоты вашего изображения ($start_x
).
Теперь разделите текст на новые строки, создайте поле ttf для каждой строки и получите его высоту ($h
) и половину ширины ($w
). Нарисуйте линию, начиная с половины ширины изображения + $w
и $start_x
, добавьте $h
к $start_x
, повторяйте, пока не будут написаны все строки.
Пользователь valentijn de Pagter предоставляет в руководстве по php net хорошую функцию для вычисления поля (я вижу, что вы действительно используете imagettfbbox()) и из массива, который он возвращает, вычисляет, как центрировать текст. Вы можете найти его здесь:
Вот что я сделал. используя функцию imagettftext, вы можете добавить новые метки строк и перейти к следующей строке. Вы можете добавить \n в строку после определенного количества символов. Этот пример будет прерываться только на пробелах, поэтому слова не будут обрезаны.
$description=$property['description'];
$len=strlen($description);
$str="";
$c=0;
for($i=0;$i<$len;$i++){
$chr=substr($description,$i,1);
$str.=$chr;
if($c>40 && $chr==" ") {
$str.="\n";
$c=0;
}
$c++;
}
$result=$str;
imagettftext($img, 15, 0, $x - 60, $descmgn, $textcolor, $font, $result);