PHP

PHP GD выравнивание многострочного текста

Не всегда ведь текст располагается прижатым к левой части. А может нам понадобится текст выровнять по правому краю, как тогда быть?

Html средствами сделать это просто, а как разместить текст на картинке по центру или прижатым в право средствами PHP GD?

Все очень просто! Делаем все то же самое, только не выводим текст целиком, а выводим построчно. Рассчитываем ширину строки и сколько нужно отступить от левого края,чтобы строка была по центру или прижата к правой части, в зависимости от того, какое выравнивание. Ниже приведен PHP код с комментариями:

<?php
// Прописываем заголовок PNG-изображения
header('Content-type: image/png');

// Создаем изображение
$im = imagecreatetruecolor(600, 200);

// Шрифт текста
$font = 'arial.ttf';

// Размер шрифта
$font_size = 11;

// Ширина области для вывода текста
$width_text = 500;

// Длинный многострочный текст, который нужно разбить на строки нужной нам длины 
$text = "Здесь длинный многострочный текст. Давайте просто разобъем строку на массив и при переборе массива выясним, где длина строки выходит за рамку, там и поставим перенос строки.";

// Способ выравнивания текста
//$align = "left";
$align = "center";
//$align = "right";

// Создаем цвета, которые понадобятся
$blue	= imagecolorallocate($im, 0x88, 0x88, 0xFF);	// голубой
$black	= imagecolorallocate($im, 0x00, 0x00, 0x00);	// черный

// Заливаем изображение цветом
imagefill($im, 1, 1, $blue);

// Разбиваем наш текст на массив слов
$arr = explode(' ', $text);

// Возращенный текст с нужными переносами строк, пока пустая
$ret = "";

// Перебираем наш массив слов
foreach($arr as $word)
	{
		// Временная строка, добавляем в нее слово
		$tmp_string = $ret.' '.$word;
		
		// Получение параметров рамки обрамляющей текст, т.е. размер временной строки 
		$textbox = imagettfbbox($font_size, 0, $font, $tmp_string);
		
		// Если временная строка не укладывается в нужные нам границы, то делаем перенос строки, иначе добавляем еще одно слово
		if($textbox[2] > $width_text)
			$ret.=($ret==""?"":"\n").$word;
		else
			$ret.=($ret==""?"":" ").$word;
	}	

if($align=="left")
	{	
		// Накладываем возращенный многострочный текст на изображение, отступим сверху и слева по 50px
		imagettftext($im, $font_size ,0 , 50, 50, $black, $font, $ret);
	}
else
	{
		// Разбиваем снова на массив строк уже подготовленный текст
		$arr = explode("\n", $ret);
		
		// Расчетная высота смещения новой строки
		$height_tmp = 0;
		
		//Выводить будем построчно с нужным смещением относительно левой границы
		foreach($arr as $str)
			{
				// Размер строки 
				$testbox = imagettfbbox($font_size, 0, $font, $str);
				
				// Рассчитываем смещение
				if($align=="center")
					$left_x = round(($width_text - ($testbox[2] - $testbox[0]))/2);
				else
					$left_x = round($width_text - ($testbox[2] - $testbox[0]));
					
				// Накладываем текст на картинку с учетом смещений
				imagettftext($im, $font_size ,0 , 50 + $left_x, 50 + $height_tmp, $black, $font, $str); // 50 - это отступы от края
				
				// Смещение высоты для следующей строки
				$height_tmp = $height_tmp + 19;
			}
	}

// Выводим изображение в окне браузера
imagepng($im);

// Освобождает память занятую изображением 
imagedestroy($im);
?>


Обратите внимание, что шрифт arial.ttf должен лежать в этой же папке что и скрипт.
Что получится при выполнении данного PHP скрипта.

$align = "left";


$align = "center";


$align = "right";


Скачать пример здесь (файл .zip 191.5 КБ)

Источник: mittelspiel.ru
Теги:
GD, выравнивание многострочного текста
Добавлено: 23 Октября 2015 21:27:10 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...