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

Тема в разделе "Как сделать...", создана пользователем danneo, 14 фев 2019.

  1. danneo

    danneo Честный

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

    OREON

    Регистр.:
    18 янв 2009
    Сообщения:
    385
    Симпатии:
    66
    Примерно вот так это можно зделать,,но пилять нужно конкретно под свои нужды самому,главное что начало у Вас уже есть.

    Код:
    <?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; ?>
    
     
    Последнее редактирование: 14 фев 2019
    danneo нравится это.
  3. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.506
    Симпатии:
    115
    Круто. Спасибо. Это вы так для меня заморочились или где-то взяли?

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