На генеруються, засобами 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) - функція виведення тексту на зображення.
Приклад-рішення
На прикладі виведемо текст щодо вертикальної лінії. По лівому краю, по центру і по правому відповідно.
// Прописуємо заголовок 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);