Как добавить текст на JPG-изображение

Первым делом следует проверить, подключена ли у вас GD library, используя функцию:

phpinfo();

Если да, то продолжим.

Итак, нам понадобится всего лишь три файла: pic.jpg — это картинка, которую мы хотим исписать текстом, index.php — файл с HTML-кодом, который будет показывать картинку, img.php будет содержать php-код, добавляющий текст.

Так, с картинкой всё понятно, а вот что будет находиться в index.php:

<?php
	$name = 'Михаил Рудрастых';
?>
<img src="img.php?name=<?php echo urlencode($name) ?>" alt="" />

А теперь самое интересное, 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() в файле можно использовать по несколько раз, меняя параметры.

Подпишитесь, чтобы раз в неделю получать свежие статьи с блога по email.

Смотрите также

Комментарии 13

  • Валерий18 марта 2014 в 20:03 #

    Есть лог с данными, к примеру фамилия, дата, ещё что то, загруженные на сайт.
    Есть картинка 140х90 мм. Вопрос - как человек может впечатать свою фамилию в форму и
    скачать картинку себе на комп?
    Пример смотрите здесь http://cqham.kz/cqgc/kedr/
    Как сделать такую функцию?

    • Миша20 марта 2014 в 22:03 #

      в параметре action формы вписать ссылку на файл, который будет возвращать картинку, если нужно просто открывать ее - то можно использовать пример с данного поста,
      если нужно обязательно скачивать, тогда через header force download

      • Валерий20 марта 2014 в 23:03 #

        Там на указанном сайте всё это немного посложнее выглядит.
        Пройдите по ссылке во вкладку "участник", введите туда например R7TT,
        посмотрите что высветится. Там загружается логи с данными, потом человек приходит на сайт вводит туда свои данные - R7TT и получает возможность скачивать заполненные дипломы и карточки.
        Как это сделать, не пойму. С html кодом знаком, а вот с PHP программированием нет.

  • Валерий21 марта 2014 в 18:03 #

    Скорее всего увы нет.

  • Тина27 октября 2014 в 09:10 #

    Не получилось реализовать ваш пример, можете скинуть архив файлов?

    • Миша27 октября 2014 в 16:10 #

      Три файла:

      1. любое изображение в формате JPG
      2. файл index.php (содержимое выше в статье)
      3. файл img.php (содержимое выше)

      Все файлы находятся в одной директории.

  • Ололош11 декабря 2014 в 19:12 #

    Не работает пример
    Вот что получается
    http://s013.radikal.ru/i323/1412/c2/7801422af7a4.jpg

  • fozik20 июля 2015 в 17:07 #

    спс за пример, все работает, ракам просто клешни надо отрубить и вырастить руки)))

  • Богдан6 августа 2015 в 17:08 #

    а если нужно текст переносить на следующую строку, допустим он не помещается на одну строку?

    • Миша7 августа 2015 в 07:08 #

      Можете несколько раз использовать imagettftext() — для каждой строки отдельно.

      • Богдан8 августа 2015 в 01:08 #

        Мне нужно было переносить текст на следующую строку, при этом неизвестно сколько слов будет в тексте, а соответственно - сколько строк.
        Уже нашел решение на в документации php, там в комментах написали специальную функцию для этого

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Комментарии закрыты.
  • Миша: Привет ещё раз, не поверишь, реально не сталкивался с этим вопросом. По теории можно сказать следующее: во-первых,...

  • Миша: Привет, вообще без проблем, делаешь всё через require(), require_once() - выбирай любую, какая больше нравится.

  • Виталий Моргунов: Привет! Не могу разобаться, как я могу контролировать порядок подключения стилей. В моем случае мне нужно чтобы стили...

  • Миша: Спасибо!

  • w0rmak: Это было просто. Нашел код в интернете. Добавьте и себе ymaps.load(function () { var input = document.getElem...