PHP

Как выровнять текст на изображении (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);

?>
Добавлено: 20 Августа 2013 03:46:19 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...