Перенос строки по словам для imagettftext

Текст одной строкой не всегда умещается в заданную ширину картинки, тогда нужно переносить слова текста на новую строку в зависимости от ширины. Лишь бы ширина не оказалась меньше одного слова, а то нужен будет бубен шамана и дальше колдовать. Пример 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_size, 0, $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_size, 0, $font, $text_new);
//высота нового текста
$height = $box[1] + $font_size + $margin * 2;

//создаём картинку
$im = imagecreatetruecolor($width, $height);

//создаём цвета
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
//заполняем картинку цветом
imagefilledrectangle($im, 0, 0, $width, $height, $white);

//добавляем текст в картинку
imagettftext($im, $font_size, 0, $margin, $font_size+$margin, $black, $font, $text_new);

//возвращаем картинку
imagepng($im);
//удаляем картинку из памяти
imagedestroy($im);
Запись опубликована в рубрике Программирование с метками , , , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт защищен политикой конфиденциальности и условиями использования reCAPTCHA и Google.