Рисование текста в PHP
Сейчас мы с Вами будем разбирать очень важную тему - рисование текста в PHP. Является она важной, так как самый популярный пример работы с графикой - это генерирование капчи (картинки с проверочным кодом), которую Вы, наверняка, видите и вводите очень часто. И для генерации капчи необходимо уметь рисовать текст на PHP, чему Вы, прочитав эту статью, и научитесь.
Существует два способа рисования текста в PHP: с использованием встроенного в PHP шрифта и с использованием внешнего шрифта. Сначала разберём более простой вариант - рисование текста встроенным шрифтом в PHP:
<?php
//Создаём "чистый" холст для рисования шириной 200 пикселей и высотой 300 пикселей
$i = imageCreate(200, 300);
//Делаем белый фон
$color = imageColorAllocate($i, 255, 255, 255);
//Устанавливаем красный цвет
$color = imageColorAllocate($i, 255, 0, 0);
//Рисуем горизонтальный текст
imageString($i, 5, 80, 150, "MyRusakov.ru", $color);
//Рисуем вертикальный текст
imageStringUp($i, 5, 80, 150, "MyRusakov.ru", $color);
//Отправляем заголовок с mime-type
Header("Content-type: image/jpeg");
//Выводим изображение
imageJpeg($i);
//Уничтожаем идентификатор и освобождаем ресурсы сервера
imageDestroy($i);
?>
Новая функция здесь - это imageString(resource $im, int font, int x, int y, string s, int color). Данная функция рисует текст шрифтом font на изображении im. Левый верхней угол текста задаётся координатами x и y, а цвет - аргументом color.
Функция imageStringUp(resource $im, int font, int x, int y, string s, int color) аналогичная, только здесь рисуется текст вертикально. А координаты x и y означают левый нижний угол изображения (фактически, это будут координаты первой буквы выводимой строки).
Скажу пару слов об аргументе font. Это число, которое задаёт размер шрифта. Однако, больше 5-ти Вы не поставите.
Теперь же разберём наиболее оптимальный способ рисования текста в PHP с использованием сторонних ttf-шрифтов:
<?php
//Создаём "чистый" холст для рисования шириной 200 пикселей и высотой 300 пикселей
$i = imageCreate(200, 300);
//Делаем белый фон
$color = imageColorAllocate($i, 255, 255, 255);
//Устанавливаем красный цвет
$color = imageColorAllocate($i, 255, 0, 0);
//Рисуем текст ttf-шрифтом
imageTtfText($i, 16, 94, 100, 150, $color, "times.ttf", "MyRusakov.ru");
//Отправляем заголовок с mime-type
Header("Content-type: image/jpeg");
//Выводим изображение
imageJpeg($i);
//Уничтожаем идентификатор и освобождаем ресурсы сервера
imageDestroy($i);
?>
Здесь используется функция imagettftext (resource im, int size, int angle, int x, int y, int color, string fontfile, string s). Эта функция позволяет нарисовать текст s на изображении im с помощью шрифта, заданного в fontfile и размером size. Левый верхний угол задаётся координатами x и y, цвет текста аргументом color, а угол наклона текста аргументом angle. Угол 0 градусов находится на 3-х часах. Отсчёт угла ведётся против часовой стрелки. В общем, попрактикуйтесь, и сразу всё поймёте.
Где взять ttf-шрифт? Либо поищите у себя на компьютере (введите в "Поиске" "*.ttf", наверняка, у Вас их будет предостаточно), либо в Интернете. Далее копируйте ttf-шрифт к себе на сайт, а затем в PHP указывайте путь к этому файлу шрифтов.
Вот мы и разобрали очень важную тему. Однако, есть один очень важный момент - у Вас не получится рисовать русские буквы из-за проблем с кодировкой. И вот как такую проблему решить, я расскажу в следующей статье, так что не переключатейсь, а лучше подпишитесь на обновления, чтобы ничего не пропустить.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.