Intereting Posts
Как отправить запрос приложения всем пользователям с помощью диалогового окна запроса Facebook? Отображать динамические диапазоны из таблицы базы данных и подсчитывать строки в каждом диапазоне Интеграция Wordign Codeigniter: как заменить site_url на CI? Файл-получить-содержимое не удалось открыть поток Неавторизованный Предупреждение: невозможно изменить информацию заголовка – заголовки, уже отправленные php error Запуск скрипта Python в PHP: захват всех выходов Невозможно изменить информацию заголовка – заголовки, уже отправленные … WordPress Issue Как опросить электронную почту с помощью размещенных решений? PHP или ASP Эхо-специфические атрибуты продукта и метаданные в корзине WooCommerce php – вставить переменную в строку эха Laravel 5.4, переименование столбца таблицы пользователей Наследование класса PHP для начинающих Функция get_status () возвращает 1 вместо true или false, почему? Заполнение событий в полном календарном javascript из базы данных открыть электронную почту php, используя imap, давая мне эту ошибку Сообщение: imap_open () : Не удалось открыть поток {imap.gmail.com:993/imap/ssl}INBOX

Обтекание строк текста в границах изображения с помощью gd

Я пытаюсь написать текст с db на изображения. Текст несколько раз содержит длинные строки, чтобы он не вписывался в одну строку на изображении.

На данный момент я получаю вывод как: http://prntscr.com/29l582

Это код для этого:

$imageCreator = imagecreatefrompng($i+1 . ".png"); $textColor = imagecolorallocate($imageCreator, 0, 0, 0); $textfromdb = $factformatted['fact']; $y = imagesy($imageCreator) - 228; $dimensions = imagettfbbox(20, 0, $fontname, $textfromdb); $x = ceil(($imageWidth - $dimensions[4]) / 2); imagettftext($imageCreator, 20, 0, $x, $y, $textColor, $fontname, $textfromdb); imagepng($imageCreator, "./fact".$i.".png"); 

Может ли кто-нибудь помочь мне заставить его работать?

Вы можете использовать функцию wordwrap и функцию explode для обрезания текста в нескольких массивах строки, а затем распечатать их:

 $word = explode("\n", wordwrap ( "A funny string that I want to wrap", 10)); 

Вы получаете этот результат:

  array(5) { [0]=> string(7) "A funny" [1]=> string(6) "string" [2]=> string(6) "that I" [3]=> string(7) "want to" [4]=> string(4) "wrap" } 

Чем вы можете это уточнить (вырезать текст, распечатать каждую строку на разных строках и т. Д.).

Пример (печать на новых строках):

 ... $dimensions = imagettfbbox(20, 0, $fontname, $textfromdb); $y = imagesy($imageCreator) - 228; $text = explode("\n", wordwrap($textfromdb, 20)); // <-- you can change this number $delta_y = 0; foreach($text as $line) { $delta_y = $delta_y + $dimensions[3]; imagettftext($imageCreator, 20, 0, 0, $y + $delta_y, $textColor, $fontname, $line); } ... 

Чтобы центрировать как вертикальные, так и горизонтальные:

 ... $dimensions = imagettfbbox(20, 0, $fontname, $textfromdb); $margin = 10; $text = explode("\n", wordwrap($textfromdb, 20)); // <-- you can change this number $delta_y = 0; //Centering y $y = (imagesy($imageCreator) - (($dimensions[1] - $dimensions[7]) + $margin)*count($text)) / 2; foreach($text as $line) { $dimensions = imagettfbbox(20, 0, $fontname, $line); $delta_y = $delta_y + ($dimensions[1] - $dimensions[7]) + $margin; //centering x: $x = imagesx($imageCreator) / 2 - ($dimensions[4] - $dimensions[6]) / 2; imagettftext($imageCreator, 20, 0, $x, $y + $delta_y, $textColor, $fontname, $line); } ...