За последние 24 часа нас посетили 85259 программистов и 4733 робота. Сейчас ищут 1759 программистов ...

Как в imagettftext вставить текст также, как в textarea

Тема в разделе "PHP для новичков", создана пользователем Alex2021, 8 мар 2023.

  1. Alex2021

    Alex2021 Новичок

    С нами с:
    8 мар 2023
    Сообщения:
    2
    Симпатии:
    0
    Добрый день. Прошу пожалуйста помочь с задачей.

    Как реализовать вывод текста в изображении с переносом строк также, как в textarea?
    Имеется такой код

    PHP:
    1. //размер шрифта
    2.         $font_size = $titlesize[0];
    3.         //требуемая ширина картинки
    4.         $width = 1050;
    5.         //отступ от краёв для текста
    6.         $margin_x = 220;
    7.         $margin_y = 600;
    8.         //разбиваем текст на слова
    9.         $text_a = explode(' ', $_GET['bg_txt']);
    10.         $text_new = '';
    11.         foreach($text_a as $word){
    12.             //создаём новый текст, добавляем слово и вычисляем параметры текста
    13.             $box = imagettfbbox($font_size, 0, $font_txt, $text_new.' '.$word);
    14.     //если строка влезает в заданную ширину, то добавляем слово с пробелом, если нет то переносим на новую строку
    15.             if($box[2] > $width - $margin*2){
    16.                 $text_new .= "\n".$word;
    17.             } else {
    18.                 $text_new .= " ".$word;
    19.             }
    20.         }
    21.         //убираем первый пробел
    22.         $text_new = trim($text_new);
    23.         //нужны параметры нового текста
    24.         $box = imagettfbbox($font_size, 0, $font_txt, $text_new);
    25.         $leftt = $margin_x-round(($box[2]-$box[0])/2);
    26.         //высота нового текста
    27.         $height = $box[1] + $font_size;
    28.         //добавляем текст в картинку
    29.         imagettftext($im_end, $font_size, 0, $margin_x, $font_size+$margin_y-($height / 2), $black, $font_txt, $text_new);
    Данный код исправно выводит текст с переносом текста, если тот не умещается в ширину. Но никак не могу понять, как реализовать перенос текста, чтобы если в textarea было написано:

    "
    Всем привет!
    Вот тут текст
    Текст с переносом слов.
    "


    Текст в изображении выводился также, как выше, а не так, как ниже:

    "
    Всем привет! Вот тут текст
    Текст с переносом слов.
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    756
    Адрес:
    Татарстан
    предположу, что ширина textarea должна = ширине изображения, ну и размер символов совпадать
    что скорее всего невозможно в общем случае... так как размер текста а textarea а соответственно и переносов будут менять от размера шрифта в нем... и легко может изменится например при изменении масштаба браузера
     
  3. Alex2021

    Alex2021 Новичок

    С нами с:
    8 мар 2023
    Сообщения:
    2
    Симпатии:
    0

    Размер шрифта фиксированный. Сейчас у меня он переносит слова на другие строки без изменения размера шрифта, но переносит сам, когда заканчивается ширина, что я задал в image. Вот я и ищу способ, чтобы клиент мог сам сделать перенос строки, без ожидания перезаполнения выделенной ширины в image


    Ширина textarea не можем быть = ширине изображения, т.к. в ширину без переноса возможно ввести до 5 слов. Вот я и ищу решение, чтобы если клиент захочет в 1 строке ввести всего 2 слова и после во 2 строке ввести 5 слов, то в image отобразилось также " в 1 строке 2 слова, а во 2 строке 5 слов" , а не "5 слов в 1 строке и автоматический перенос оставшихся 2 слов во 2 строку"
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.874
    Симпатии:
    756
    Адрес:
    Татарстан
    тогда смотрите получившуюся строку на предмет переноса строки - разбейте ее например explode()
    в результате у вас будет не одна строка а 3 например - их уже в изображение и выводите, одну под другой