KOTOFF.NET
  • Главная
  • Пользователи
  • Контакты
  • Статистика
  • Правила
  • О нас
  • Вход / Регистрация

Создание динамической картинки со своим текстом и изображением с помощью PHP и использованием Imagick

Статьи / PHP

В данной статье я покажу и расскажу как быстро и просто добавлять свои вотемарки, текст и изображения на заранее заготовленную картинку. Тем самым Вы сможете создать свою картинки с изменяемым ее содержанием. Создаем свою картинку с помощью PHP


Данную технологию мы используем в наших проектах уже не один год, это выглядит примерно вот так:

Весь текст и аватарка накладывается с помощью кода и класса Imagick, в нашем случае мы используем это в ботах при ответах, но это не ограничивается этим.

Я постараюсь максимально описать процесс понятным языком, потому что статья рассчитана для новичков и давайте начнем!

Создаем файл в формате php, в моем случае это будет test.php

В самое начало добавляем define, что бы работало как на Win так и на Unix системах

<?

define('BASEPATH', str_replace('\\', '/', dirname(__FILE__)) . '/');

Теперь подключаем классы Imagick и ImagicDraw и указываем с каким изображением будем работать, я взял за основу samsung s10+ исходники будут в архиве в конце статьи

<?php

define('BASEPATH', str_replace('\\', '/', dirname(__FILE__)) . '/');

$image_bg = BASEPATH . 'test/s10plus.png'; // Наша основная картинка

$draw = new ImagickDraw(); // Для работы с текстом
$bg = new Imagick($image_bg); // работа с самой картинкой


Давайте сразу наложим текст и выведем полученное изображение в браузере + сохраним готовое изображение на сервере

<?php


define('BASEPATH', str_replace('\\', '/', dirname(__FILE__)) . '/');

$image_bg = BASEPATH . 's10plus.png'; // Наша основная картинка

$draw = new ImagickDraw(); // Для работы с текстом
$bg = new Imagick($image_bg); // работа с самой картинкой

// 1 это x - Слева на право / 2 это y - Сверху вниз / Сам текст
$bg->annotateImage($draw, 1100, 500, 0, 'Привет KOTOFF.NET');

$bg->writeImage(BASEPATH ."s10_test.png");


echo '<img src="/test/s10_test.png" alt="image" title="IMagick Generated Image" />';

Что получилось? Достаточно открыть на файл test.php в браузере


Как видите все очень просто и понятно, давайте поменяем цвет текста и сделаем его больше, тут нам уже пригодиться ImagickDraw

<?php


define('BASEPATH', str_replace('\\', '/', dirname(__FILE__)) . '/');

$image_bg = BASEPATH . 's10plus.png'; // Наша основная картинка

$draw = new ImagickDraw(); // Для работы с текстом
$bg = new Imagick($image_bg); // работа с самой картинкой


// Все изменения текста пишутся ПЕРЕД самим текстом, если другой текст должен быть другого цвета, дублируйте код с новыми параметрами перед другим текстом но ниже текущего
$draw->setTextAlignment(Imagick::ALIGN_LEFT); // Выравниваем текст слева (ALIGN_CENTER - по центру) (ALIGN_RIGHT - Справа налево)
$draw->setFillColor("rgb(59 ,0, 255)"); // Цвет
$draw->setFontSize(50); // размер шрифта
// 1 это x - Слева на право / 2 это y - Сверху вниз / Сам текст
$bg->annotateImage($draw, 1100, 500, 0, 'Привет KOTOFF.NET');

$bg->writeImage(BASEPATH ."s10_test.png");


echo '<img src="/test/s10_test.png" alt="image" title="IMagick Generated Image" />';

Получаем это:

Теперь текст видно великолепно, давайте еще я покажу как применять разные шрифты на любой вкус и накладывание картинки, а в конце я просто оформлю это что бы вы уже могли переписывать все под себя, это очень затягивает на самом деле!

Скачиваем какой ни будь шрифт и кидаем его туда же где лежат все наши файлы

<?php


define('BASEPATH', str_replace('\\', '/', dirname(__FILE__)) . '/');

$image_bg = BASEPATH . 's10plus.png'; // Наша основная картинка

$draw = new ImagickDraw(); // Для работы с текстом
$bg = new Imagick($image_bg); // работа с самой картинкой


// Все изменения текста пишутся ПЕРЕД самим текстом, если другой текст должен быть другого цвета, дублируйте код с новыми параметрами перед другим текстом но ниже текущего
$draw->setTextAlignment(Imagick::ALIGN_LEFT); // Выравниваем текст слева (ALIGN_CENTER - по центру) (ALIGN_RIGHT - Справа налево)
$draw->setFillColor("rgb(59 ,0, 255)"); // Цвет
$draw->setFontSize(50); // размер шрифта
$draw->setFont(BASEPATH . "Malik-Light-trial.ttf");
// 1 это x - Слева на право / 2 это y - Сверху вниз / Сам текст
$bg->annotateImage($draw, 1100, 500, 0, 'Привет KOTOFF.NET');

// === Новый текст с новым стилем, цветом и размером

$draw->setFillColor("rgb(0,148, 255)"); // Цвет
$draw->setFontSize(30); // размер шрифта
$draw->setFont(BASEPATH . "clickuper.ttf");
// 1 это x - Слева на право / 2 это y - Сверху вниз / Сам текст
$date = date('d.m.y H:i', time());

$bg->annotateImage($draw, 1100, 700, 0, 'Сейчас '.$date);


$logo = new Imagick(BASEPATH . 'logo.jpg');

$logo->adaptiveResizeImage(200, 200, 100); // Уменьшает
// Или используйте функцию для округления и уменьшения ниже
//RoundingOff($logo, 100, 100); // функция для уменьшения и округления накладываемых изображений

$bg->compositeImage($logo, Imagick::ALIGN_CENTER, 1100, 800);


$bg->writeImage(BASEPATH ."s10_test.png"); // Сохраняем картинку и дальше делаем с ней что угодно


echo '<img src="/test/s10_test.png" alt="image" title="IMagick Generated Image" />';


// Функции для работы с изображением 
function RoundingOff($_imagick, $width, $height)
{
    $_imagick->adaptiveResizeImage($width, $height, 100); // Уменьшает
    $_imagick->setImageFormat('png'); // Присвоение формата
    $_imagick->roundCornersImage(90, 90, 0, 0, 0 ); // округляет
}

Максимально все прокомментировал, но если возникнут вопросы, пишите в комментарии. В данном коде можно использовать функцию  RoundingOff что бы округлять и уменьшать накладываемые изображения, так же для другого текста я использовал другие параметры и вот что получилось:

В целом для генерации картинок на PHP этого уже достаточно что бы делать красивое и уникальное оформление, дальне все зависит от вашего креативного подхода и будущего применения. Вот что можно сделать например:

<?php


define('BASEPATH', str_replace('\\', '/', dirname(__FILE__)) . '/');

$image_bg = BASEPATH . 's10plus.png'; // Наша основная картинка

$draw = new ImagickDraw(); // Для работы с текстом
$bg = new Imagick($image_bg); // работа с самой картинкой


$logo = new Imagick(BASEPATH . 'logo.jpg');

$logo->adaptiveResizeImage(200, 200, 100); // Уменьшает
// Или используйте функцию для округления и уменьшения ниже
//RoundingOff($logo, 100, 100); // функция для уменьшения и округления накладываемых изображений

$bg->compositeImage($logo, Imagick::ALIGN_CENTER, 1100, 400);


$logo_2 = new Imagick(BASEPATH . 'b.jpg');
$logo_2->adaptiveResizeImage(600, 600, 100); // Уменьшает
$bg->compositeImage($logo_2, Imagick::ALIGN_CENTER, 1095, 900);


// Все изменения текста пишутся ПЕРЕД самим текстом, если другой текст должен быть другого цвета, дублируйте код с новыми параметрами перед другим текстом но ниже текущего
$draw->setTextAlignment(Imagick::ALIGN_LEFT); // Выравниваем текст слева (ALIGN_CENTER - по центру) (ALIGN_RIGHT - Справа налево)
$draw->setFillColor("rgb(59 ,0, 255)"); // Цвет
$draw->setFontSize(50); // размер шрифта
$draw->setFont(BASEPATH . "Malik-Light-trial.ttf");
// 1 это x - Слева на право / 2 это y - Сверху вниз / Сам текст
$bg->annotateImage($draw, 1250, 550, 0, ' KOTOFF.NET');

// === Новый текст с новым стилем, цветом и размером

$draw->setFillColor("rgb(0 ,148, 255)"); // Цвет
$draw->setFontSize(30); // размер шрифта
$draw->setFont(BASEPATH . "clickuper.ttf");
// 1 это x - Слева на право / 2 это y - Сверху вниз / Сам текст
$date = date('d.m.y H:i', time());

$draw->setTextAlignment(Imagick::ALIGN_CENTER);
$bg->annotateImage($draw, 1390, 1430, 0, 'Сейчас '.$date);



$bg->writeImage(BASEPATH ."s10_test.png"); // Сохраняем картинку и дальше делаем с ней что угодно


echo '<img src="/test/s10_test.png" alt="image" title="IMagick Generated Image" />';


// Функции для работы с изображением
function RoundingOff($_imagick, $width, $height)
{
    $_imagick->adaptiveResizeImage($width, $height, 100); // Уменьшает
    $_imagick->setImageFormat('png'); // Присвоение формата
    $_imagick->roundCornersImage(90, 90, 0, 0, 0 ); // округляет
}

Получаем готовое изображение 



Кроме этого картинку можно немного сжимать что бы они меньше занимала места

$bg->writeImage(BASEPATH ."s10_test.png"); // Сохраняем картинку и дальше делаем с ней что угодно

$bg->adaptiveResizeImage(800, 0); // Сжимаем до 800пх
$bg->writeImage(BASEPATH ."s10_test_r.png"); // Сохраним сжатую копию

Для наглядности наше сжатое изображение выглядит теперь так:


Что бы проще было понимать какие именно координаты нужно указывать, используйте любой редактор, в моем случае это PAINT достаточно навести на место куда нужно разместить текст и указать это потом в коде 

Значения могут быть не точными, но очень близки к реальным. Архив с файлами и кодом можно скачать ниже. Оцените статью лайком, так мы понимаем что эта тема интересна и будем дальше писать об этом  😉

Теперь вы знаете как с помощью PHP создать изображение!

source_kotoff_net.rar
  • Сергей Котов
  • 14.01.2021
  • 9 207
  • 3
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
19-03-2019, 17:23, Статьи / PHP
Скрипт исключения из беседы VK и не только, написанный на PHP
Скрипт исключения из беседы VK и не только, написанный на PHP
21-02-2019, 04:04, Статьи / PHP
Услуги по разработке ботов и сайтов - Стоимость и возможности
Услуги по разработке ботов и сайтов - Стоимость и возможности
30-01-2020, 13:37, Обновления
Авторизация на сайте с помощью ВК, простой и понятный способ на PHP!
Авторизация на сайте с помощью ВК, простой и понятный способ на PHP!
3-10-2019, 14:27, Статьи / PHP
  1. че

    че Гость 16 января 2021 12:17

    а

  2. Артем Фриз

    Артем Фриз@Артем Фриз 19 января 2021 19:11

    good

  3. Борис

    Борис Гость 15 июня 2021 20:16

    Спасибо!
{login}

Твой комментарий..

Заказывай!
Разработка ботов на заказ, любой сложности, обращаться:
 VK KOTOFF.net - Сообщество, в личные сообщения или по контактам указанным там 
 mail: [email protected]

Рекламный блок
  • Новости
  • Платная категория
  • Блог
  • Игры
  • Обновления
  • Программы
  • Статьи
    • PHP
    • Python
    • JS
  • Дизайн
    • PSD исходники
  • DLE
    • Шаблоны
    • Модули
    • Хаки
  • Магазин
    • Скрипты
Комментарии
Система комментариев на PHP
Полезная статья
Создание простого Telegram-бота с клавиатурой и inline-кнопками [Часть 2]
Класс, хорошая тема
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Как отключить вывод результата cron в папку modules/cron в Open Server? Крон запускает несколько
Динамическая обложка для группы ВК, последний подписчик, топ комментатор и прочее
Планируете ли вернуться к динамической обложке?
Скрипт для скачивания видео с YouTube на PHP
Уже не работает.
Все комментарии..
Полный список последних комментариев
Лучшие новости
Всего публикаций: 115
Добавлено за сутки: +0
Записей в блоге: 1
Добавлено за сутки: +0
Комментариев: 936
Добавлено за сутки: +0
Пользователей: 4124
Добавлено за сутки: +0
Полная статистика..
Подробная статистика сайта
Loading...

Нашли ошибку?
Вы можете сообщить об этом администрации.
Выделив текст нажмите CTRL+Enter

Полезные ссылки
  • О проекте
  • Наши контакты
  • Администрация
  • Рекламные материалы
  • Идеи и предложения
  • Ответы на вопросы
Информация
  • Условия сделки
  • Способы оплаты
  • Поддержка / F.A.Q
  • Онлайн документация
  • Статистика сайта
  • Список пользователей
Услуги/Работа
  • Разработка ботов ВК
  • Обновление проекта
  • Консультация/поддержка
KOTOFF.net

Copyright © Footer 2019-2023. All right reserved.
KOTOFF.net - Уроки по PHP, SQL, IT новости
Быстрый вход

Используйте социальные сети для быстрой регистрации и авторизации.

Google
ВКонтакте
Яндекс
Mail.ru
Создать аккаунт / Регистрация
Авторизация

Я забыл свой пароль