Как сделать наложение текста на картинку?

danneo

Честный
Регистрация
13 Ноя 2007
Сообщения
1.526
Реакции
121
С библиотеками практически не сталкивался, только обрезка, ватермарка...
нужно сделать наложение текста на картинку, но не просто так. Есть макет изделия, например, коробочка. На нее нужно наложить текст. Где-то в 3 строки, где-то в 1 строку, т.е. у каждого изображения свои поля для ввода. У текста на каждую строку есть ограничение по длине, чтобы макет не плыл.
В итоге генерируется изображение с этими строками в нужном размере шрифта и в нужном месте. И это нужно сделать уникально для каждого товара. Это некое подобие онлайн генераторов визиток и т.п. Только конкретно вводить надписи без других настроек.
Не могу понять ни процесс работы скрипта, ни то, как создавать в нужно месте и нужного размера.
Подскажите, пожалуйста.
 
Примерно вот так это можно зделать,,но пилять нужно конкретно под свои нужды самому,главное что начало у Вас уже есть.

Код:
<?php
$img="images/bilet.jpg";
$pic = ImageCreateFromjpeg($img); //открываем рисунок в формате JPEG
Header("Content-type: image/jpeg"); //указываем на тип передаваемых данных
$color=ImageColorAllocate($pic, 250, 0, 0); //получаем идентификатор цвета
/* определяем место размещения текста по вертикали и горизонтали */
$h = 260; //высота
$w = 220; //ширина
/* выводим текст на изображение */
ImageTTFtext($pic, 26, 0, $w, $h, $color, "Times", "Simona");
ImageTTFtext($pic, 26, 0, $w-50, $h+65, $color, "Times", time());
Imagejpeg($pic,"images/".time().".jpg"); //сохраняем рисунок в формате JPEG
ImageDestroy($pic); //освобождаем память и закрываем изображение
?>
Ну а что бы оно сохраняло в отдельную папку и т.д. примерно вот так нужно делать, дальше только ваша фантазия)))
Код:
<?php
    class ImageCreate
    {
        /**
        * @var $settings - НАСТРОЙКИ
        * src  - Путь к изображению, на которое нанесём текст
        * size - Размер шрифта
        * top  - Отступ сверху
        * left - Отступ слева
        * font - Путь к файлу шрифта
        * save - Путь для сохранения
        */
        private $settings = [
            "src"  => "image.jpg",
            "size" => 26,
            "top"  => 260,
            "left" => 220,
            "font" => "ariali.ttf",
            "save" => "images/"
        ];
     
        /**
        *
        * @var Содержит пользовательский текст
        *
        */
        private $text;
     
        /**
        *
        * @param пользовательский текст $text
        *
        */
        public function __construct($text){
            $this->text = $text;
        }
     
        /**
        *
        * @return путь к созданному изображению
        *
        */
        public function create()
        {
            # Открываем рисунок в формате JPEG
            $img = imagecreatefromjpeg($this->settings["src"]);
         
            # Получаем идентификатор цвета
            $color = imagecolorallocate($img, 250, 0, 0);
       
            /* выводим текст на изображение */
            imagettftext(
                $img,
                $this->settings["size"],
                0,
                $this->settings["left"],
                $this->settings["top"],
                $color,
                $this->settings["font"],
                $this->text
            );
         
            # Генерируем путь для сохранения
            $path = $this->settings["save"] . microtime(true) . ".jpg";
         
            # Сохраняем рисунок в формате JPEG
            imagejpeg($img, $path, 100);
         
            # Освобождаем память и закрываем изображение
            imagedestroy($img);
         
            # Возвращаем путь
            return $path;
        }
    }
 
    # Если нажата кнопка "Нанести на картинку"
    if(isset($_POST["submit"])){
        # Если поле для текста не пусто
        if(empty($_POST["text"]))
            # Сообщение
            echo "Введите текст!";
        else{
            # Получаем объект класса наложения текста
            $image = new ImageCreate($_POST["text"]);
         
            # Генерируем изображение и получаем путь
            $path = $image->create();
        }
    }
?>
<?php if(empty($path)):?>
<form method="post">
    <input type="text" name="text" placeholder="Введите текст" />
    <input type="submit" name="submit" value="Нанести на картинку" />
</form>
<?php else:?>
Изображение: <a href="<?=$path?>"><?=$path?></a>
<?php endif; ?>
 
Последнее редактирование:
Примерно вот так это можно зделать,,но пилять нужно конкретно под свои нужды самому,главное что начало у Вас уже есть.
Круто. Спасибо. Это вы так для меня заморочились или где-то взяли?

Выходит, что нужно в БД для каждого товара создавать шаблонное фото, и сохранять в БД нулевые координаты для каждой строки и место для аватарки (фото). Правильно?
И еще момент... подскажите, пожалуйста, какие строки еще нужно добавить, чтобы вставить фотографию человека. Он загружает, орбезает рамкой в пропорциях, я ее уменьшаю до нужного размера и накладываю, как ватермарку. А как сделать ее круглой или другой формы? Не могу найти функцию в GD
 
Назад
Сверху