Imagettftext — перенос по словам

Тема в разделе "Как сделать...", создана пользователем dmbltro, 19 мар 2012.

  1. dmbltro

    dmbltro Создатель

    Регистр.:
    18 фев 2010
    Сообщения:
    47
    Симпатии:
    4
    Как реализовать перенос текста по словам, если строка длиннее указанного размера?
     
  2. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    например подогнать текст с $text = wordwrap($text, 50, "\n"); если шрифт моноширинный, другой способ разбить текст по пробелам и состовлять новый текст с добавлением слов и проверкой на ширину, есть функция для вычисления параметров текста в картинке imagettfbbox, пример кода:
    PHP:
    <?php
    //тип содержания
    header('Content-Type: image/png');
     
    //шрифт
    $font 'arial.ttf';
    //размер шрифта
    $font_size 10;
    //требуемая ширина картинки
    $width 100;
    //отступ от краёв для текста
    $margin 5;
     
    //текст
    $text "Что где когда почему зачем и как, а так где когда почему зачем и как?";
     
    //разбиваем текст на слова
    $text_a explode(' '$text);
    $text_new '';
    foreach(
    $text_a as $word){
        
    //создаём новый текст, добавляем слово и вычисляем параметры текста
        
    $box imagettfbbox($font_size0$font$text_new.' '.$word);
        
    //если строка влезает в заданную ширину, то добавляем слово с пробелом, если нет то переносим на новую строку
        
    if($box[2] > $width $margin*2){
            
    $text_new .= "\n".$word;
        } else {
            
    $text_new .= " ".$word;
        }
    }
    //убираем первый пробел
    $text_new trim($text_new);
    //нужны параметры нового текста
    $box imagettfbbox($font_size0$font$text_new);
    //высота нового текста
    $height $box[1] + $font_size $margin 2;
     
    //создаём картинку
    $im imagecreatetruecolor($width$height);
     
    //создаём цвета
    $white imagecolorallocate($im255255255);
    $black imagecolorallocate($im000);
    //заполняем картинку цветом
    imagefilledrectangle($im00$width$height$white);
     
    //добавляем текст в картинку
    imagettftext($im$font_size0$margin$font_size+$margin$black$font$text_new);
     
    //возвращаем картинку
    imagepng($im);
    //удаляем картинку из памяти
    imagedestroy($im);