обернуть и центрировать текст в gd и php - PullRequest
3 голосов
/ 17 февраля 2011

У меня есть строка текста, которую мне нужно обернуть и отцентрировать на изображении 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 ]

2 голосов
/ 18 февраля 2011

Пользователь valentijn de Pagter предоставляет в php net manual прекрасную функцию для вычисления поля (я вижу, вы действительно используете imagettfbbox ()) и из массива, который он возвращает, вычисляет, как центрировать текст.Вы можете найти его здесь:

центральный текст с imagettfbbox

1 голос
/ 18 февраля 2011

Для центрирования по горизонтали и вертикали: получите половину высоты из imagettfbbox всего текста (с новыми строками) и вычтите его из половины высоты вашего изображения ($start_x).

Теперь разделите текст по новым строкам, создайте ttfbox для каждой строки и получите его высоту ($h) и половину ширины ($w). Нарисуйте линию, начиная с половины ширины изображения + $w и $start_x, добавьте $h к $start_x, повторяйте, пока все строки не будут написаны.

0 голосов
/ 06 июня 2012

Это то, что я сделал. используя функцию 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);
...