php-logo-elephant-2Способ 1

Помимо рисования графических элементов, в GD есть возможность нанесения текста на изображение. Причем несколькими способами. В первом примере, написание текста реализуется с помощью функции imagestring. Она может наносить текст, используя стандартные шрифты. Стандартных шрифтов всего пять, они задаются числом от одного до пяти. Чем больше значение, тем крупнее шрифт. Также функция может принимать цвет текста и координаты начала строки по осям X и Y. Хочу обратить внимание, что у этого способа нанесения текста имеется один большой недостаток, PHP функция imagestring использует стандартные шрифты в кодировке latin2. В связи с этим, вывод кириллицы не возможен.
Пример:

Способ 2

В предыдущем примере присутствовал один серьезный недостаток – отсутствовала возможность нанесения на изображение кириллического текста. Этот способ исправит недостаток предыдущего. Для нанесения текста в любой кодировке и в любом языке возможно при использовании сторонних шрифтов. В реализации примера используется функция — imagettftext. Она может принимать несколько значений: размер текста в пикселях, цвет, начало текста относительно координат по осям X и Y, сам наносимый текст и самое главное, файл шрифта, который позволит наносить текст в нужной кодировке.
Пример:

Нанесение на изображение текста с обводкой

Для нанесения на изображение текста с обводкой специальных функций нет. Но из этого положения можно выйти, используя функцию — imagettftext. Все что нужно сделать, это вывести текст не один раз, как в стандартном случае, а девять. Да, девять раз, из них восемь раз вывод текста нужно делать цветом обводки, постоянно смещая текст 1-2 пикселя влево, вправо, вниз, вверх, влево и вверх, вправо и вверх, вправо и вниз, влево и вниз. И девятый раз необходимо выводить текст уже тем цветом, которого он должен быть. Пример:

Нанесение на изображение текста с
подчеркиванием

При нанесении текста на изображение нередко случается необходимость, вывода подчеркнутого текста. К сожалению, для этих целей стандартных PHP функций нет. Но, реализовать подчеркивание можно. Для этого необходимо вывести текст и нарисовать под ним линию. Загвоздка заключается в том, что необходимо знать координаты нанесения линии, а также ее длину. Для определения начала линии можно воспользоваться координатами самого текста, только прибавить к значению по оси Y размер самого текста. А для получения длины, можно воспользоваться функцией imagettfbbox, которая определяет положение текста. Функция возвращает массив с восемью элементами, координаты углов, обрамляющей текст рамки. Используя полученные, координаты, можно легко высчитать длину текста. Пример: