How to add text to an image with PHP GD library
First of all $black = ImageColorAllocate($im, 255, 255, 255); — this is white, not black. Do you get any errors? Checked the error-log?
@iMoses I think the $black is just because hes copied code from php.net: php.net/manual/en/function.imagettftext.php
Doesn’t make it right or make sense. I’m sure they got it right. It’s not a problem, just confusing. The «blank» image might just be white on a white background.
I changed from white to black, but still same problem!!I think Imagettftext cannot find «verdana.ttf» file, although everything is in same folder..
4 Answers 4
Use this to add text to image (copied from PHP for Kids)
You just pasted it from phpforkids.com/php/php-gd-library-adding-text-writing.php try to point out problem instead
If I would want to add several lines of text on the same image before sending it to the browser, would several imagettftext() functions would need to be added? Also, how do I save this image to an actual directory in my server so that the user can print it anytime he wants?
$black = ImageColorAllocate($im, 0, 0, 0);
$img = imagecreatefromjpeg("certificate.jpg");//replace with your image $txt = 'NILESH';//your text $fontFile = realpath("arial.ttf");//replace with your font $fontSize = 24; $fontColor = imagecolorallocate($img, 255, 255, 255); $black = imagecolorallocate($img, 0, 0, 0); $angle = 0; $iWidth = imagesx($img); $iHeight = imagesy($img); $tSize = imagettfbbox($fontSize, $angle, $fontFile, $txt); $tWidth = max([$tSize[2], $tSize[4]]) - min([$tSize[0], $tSize[6]]); $tHeight = max([$tSize[5], $tSize[7]]) - min([$tSize[1], $tSize[3]]); // text is placed in center you can change it by changing $centerX, $centerY values $centerX = CEIL(($iWidth - $tWidth) / 2); $centerX = $centerX
imagettftext
Наносит текст text поверх изображения, используя TrueType шрифт.
Список параметров
Ресурс изображения, полученный одной из функций создания изображений, например, такой как imagecreatetruecolor() .
Размер шрифта. В зависимости от вашей версии GD, он должен быть указан либо в пикселах (GD1) либо в типографских пунктах (GD2).
Угол в градусах, 0 градусов означает расположение текста слева направо. Положительные значения означают поворот текста против часовой стрелки. Например, текст повернутый на 90 градусов нужно будет читать снизу вверх.
Координаты x и y определяют отправную точку для первого символа текста (конкретно, левый нижний угол символа). Здесь есть отличие от функции imagestring() , в которой x и y определяют верхний левый угол первого символа. Например, "верхний левый" имеет координаты 0,0.
y-координата. Это позиция базовой линии шрифта, в общем случае она не совпадает с низшей точкой в символе.
Индекс цвета. Использование отрицательных индексов создает эффект выключенного сглаживания. См. imagecolorallocate() .
Путь к файлу TrueType шрифта.
В зависимости от версии GD библиотеки если fontfile не начинается с /, то в конец названия файла будет добавлено расширение .ttf, и библиотека будет пытаться найти этот файл по адресу, определенному в настройках библиотеки.
При использовании GD библиотеки версий младше 2.0.18 символ space (пробел), как и точка с запятой, использовался в качестве 'разделителя путей' для различных файлов шрифтов. При использовании этой возможности будет выдаваться предупреждение: Warning: Could not find/open font. Решением такой проблемы в этих версиях может быть только исключение пробелов из путей файлов.
В большинстве случаев размещение файлов шрифтов в директории скрипта решает подобные проблемы включения файлов.
// Задание переменной окружения для GD
putenv ( 'GDFONTPATH=' . realpath ( '.' ));
?php
// Имя шрифта для использования (обратите внимание на отсутствие расширения .ttf)
$font = 'SomeFont' ;
?>
Текстовая строка в кодировке UTF-8.
Для доступа к символам после 127го можно использовать числовые ссылки (в формате: €). Также поддерживается шестнадцатеричный формат (©). Строки в кодировке UTF-8 можно передавать напрямую.
Именованные сущности, вроде ©, не поддерживаются. Используйте функцию html_entity_decode() , чтобы декодировать их в UTF-8 строки.
Если символ не поддерживается шрифтом, вместо него будет нарисован незакрашенный прямоугольник.
Возвращаемые значения
Возвращает массив из 8 элементов, представляющих 4 точки - координаты углов рамки обрамляющей текст. Точки представлены в таком порядке: левый нижний угол, правый нижний, верхний правый, верхний левый. Углы указаны относительно текста, то есть "верхний левый" означает верхний левый угол текста, если расположить его горизонтально. В случае ошибки функция вернет FALSE .
Список изменений
Версия | Описание |
---|---|
5.2.0 | Стало возможным задавать код сущности в тексте text шестнадцатеричным числом. |
Примеры
Пример #1 Пример использования imagettftext()
В этом примере будет создано изображение PNG с белым фоном размером 400x30 пикселов и надписью "Тест. " черным цветом (с серой тенью) шрифтом Arial.
// Тип содержимого
header ( 'Content-Type: image/png' );
?php
// Создание изображения
$im = imagecreatetruecolor ( 400 , 30 );
// Создание цветов
$white = imagecolorallocate ( $im , 255 , 255 , 255 );
$grey = imagecolorallocate ( $im , 128 , 128 , 128 );
$black = imagecolorallocate ( $im , 0 , 0 , 0 );
imagefilledrectangle ( $im , 0 , 0 , 399 , 29 , $white );
// Текст надписи
$text = 'Тест. ' ;
// Замена пути к шрифту на пользовательский
$font = 'arial.ttf' ;
// Тень
imagettftext ( $im , 20 , 0 , 11 , 21 , $grey , $font , $text );
// Текст
imagettftext ( $im , 20 , 0 , 10 , 20 , $black , $font , $text );
imagepng ( $im );
imagedestroy ( $im );
?>
Результатом выполнения данного примера будет что-то подобное:
Примечания
Замечание:
Для работы функции необходимо наличие установленных GD и » FreeType библиотек.
Смотрите также
Как нанести текст на изображение с помощью PHP?
PHP – многофункциональный язык программирования, и мы с вами не один раз в этом убеждались. Сегодня мы немножко поработаем с графикой, а именно – я научу вас наносить нужный вам текст на изображение с помощью этого языка.
Для начала приведу полный код скрипта, который хорошо прокомментирован:
А теперь я расскажу вам о некоторых его нюансах.
1. Переменная $font – обязательно (во избежание ошибок) должна содержать в себе ссылку на файл шрифта. Для примера в конце статьи прикреплен шрифт «Arial».
2. Переменная $pic. Здесь в зависимости от вашего формата изображения используете соответствующую функцию:
PNG – imagecreatefrompng;
JPG – imagecreatefromjpeg;
GIF – imagecreatefromgif.
3. Переменная $color – цвет шрифта в RGB-формате. Черный цвет – «0, 0, 0», белый – «255, 255, 255» и т.д.
4. Функция «imagepng». Здесь вы выбираете ту функцию, в формате которой хотите сохранить изображение:
PNG – imagepng;
JPG – imagejpeg;
GIF – imagegif.
Обратите внимание, что для того, чтобы не происходило перезаписи файлов, в качестве имени файла выступает временная метка Unix. Расширение файла вы прописываете сами в зависимости от выбранной функции сохранения.
Ну вот, вроде, и все, что вам нужно знать, остальные моменты помечены в коде.
Часть «./» означает что чтение и сохранение файлов осуществляется в той папке, где находится ваш скрипт.
Если возникли вопросы – задавайте их в комментариях.
Как добавить текст на JPG-изображение
Первым делом следует проверить, подключена ли у вас GD library, используя функцию:
Итак, нам понадобится всего лишь три файла: pic.jpg — это картинка, которую мы хотим исписать текстом, index.php — файл с HTML-кодом, который будет показывать картинку, img.php будет содержать php-код, добавляющий текст.
Так, с картинкой всё понятно, а вот что будет находиться в index.php:
$name = 'Михаил Рудрастых'; ?> echo urlencode($name) ?>" alt="Php add text to image" />
А теперь самое интересное, img.php:
// наше изображение $img = ImageCreateFromJPEG("pic.jpg"); // определяем цвет, в RGB $color = imagecolorallocate($img, 255, 0, 0); // указываем путь к шрифту $font = 'arial.ttf'; $text = urldecode($_GET['name']); imagettftext($img, 24, 0, 365, 159, $color, $font, $text); // 24 - размер шрифта // 0 - угол поворота // 365 - смещение по горизонтали // 159 - смещение по вертикали header('Content-type: image/jpeg'); imagejpeg($img, NULL, 100);
Поддержка кириллицы будет зависеть от выбранного шрифта.
Вот и всё, функцию imagettftext() в файле можно использовать по несколько раз, меняя параметры.
Миша
Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.
Пишите, если нужна помощь с сайтом или разработка с нуля.