Как выровнять текст на изображении (PHP)

На генерируемых, средствами PHP (GDLib), изображениях часто приходится выводить текст. Иногда этот текст нужно выравнивать по-центру, от какой-либо точки или по правому краю. Размер текста, как правило, разного размера, поэтому необходимо выяснить размер текста в пикселях и отнять от точки вывода текста.

Список функций

Основные функции, которые понадобятся для выравнивания текста:

imagettfbbox

array imagettfbbox(float size, float angle, string fontfile, string text) — функция возвращает массив координат прямоугольника в который можно строго вписать надпись string text, размером float size, с наклоном float angle и шрифтом string fontfile.

imagettftext

array imagettftext(resource image, float size, float angle, int x, int y, int color, string fontfile, string text) — функция вывода текста на изображение.

Пример-решение

На примере выведем текст относительно вертикальной линии. По левому краю, по центру и по правому соответственно.

<?php // Прописываем заголовок PNG-изображения header('Content-type: image/png'); // Создаем изображение $im = imagecreatetruecolor(800, 180); // За центр (по оси X) возьмем 400 $CENTER = 400; // Шрифт текста $FONT = 'ptserif.ttf'; // Создаем цвета $white = imagecolorallocate($im, 0xFF, 0xFF, 0xFF);// белый $gray = imagecolorallocate($im, 0xDD, 0xDD, 0xDD);// серый $red = imagecolorallocate($im, 0x99, 0x33, 0x33);// красный $green = imagecolorallocate($im, 0x33, 0x99, 0x33);// зеленый $blue = imagecolorallocate($im, 0x33, 0x33, 0x99);// синий // Заливаем изображение белым цветом imagefill($im, 1, 1, $white); // Рисуем линии imageline($im, $CENTER, 0, $CENTER, 180, $gray); imageline($im, 0, 60, 800, 60, $gray); imageline($im, 0, 120, 800, 120, $gray); /** * Текст по левому краю, все очень просто. */ imagettftext($im, 11, 0, $CENTER, 20, $red, $FONT, 'Текст по ЛЕВОМУ краю'); imagettftext($im, 11, 0, $CENTER, 50, $red, $FONT, 'Текст тоже по ЛЕВОМУ краю'); /** * Текст по центру. */ // размеры текст по координатам $box = imagettfbbox(11, 0, $FONT, 'Текст по ЦЕНТРУ'); // размер отступа влево, чтобы текст оказался посередине заданной точки $left = $CENTER-round(($box[2]-$box[0])/2); imagettftext($im, 11, 0, $left, 80, $green, $FONT, 'Текст по ЦЕНТРУ'); // текст по центру №2 $box = imagettfbbox(11, 0, $FONT, 'Этот очень важный текст выровнен по ЦЕНТРУ'); $left = $CENTER-round(($box[2]-$box[0])/2); imagettftext($im, 11, 0, $left, 110, $green, $FONT, 'Этот очень важный текст выровнен по ЦЕНТРУ'); /** * Текст по правому краю * Почти так же как и "по центру" только делить на 2 не нужно отступ влево */ $box = imagettfbbox(11, 0, $FONT, 'Текст по ПРАВОМУ краю'); $left = $CENTER-($box[2]-$box[0]); imagettftext($im, 11, 0, $left, 140, $blue, $FONT, 'Текст по ПРАВОМУ краю'); $box = imagettfbbox(11, 0, $FONT, 'Этот очень важный текст выровнен по ПРАВОМУ краю'); $left = $CENTER-($box[2]-$box[0]); imagettftext($im, 11, 0, $left, 170, $blue, $FONT, 'Этот очень важный текст выровнен по ПРАВОМУ краю'); // Выводим изображение imagepng($im); ?>

Результат

Выравнивание текст на изображение (PHP)

Категории

ПрограммированиеPHPИзображения в PHPИзображения

Читайте также

Комментарии