PHP работа с изображениями. Библиотека PHP GD

PHP работа с изображениями. Библиотека PHP GD

28 февраля 2020 PHP

PHP является мощным языком сценариев, и существует множество мощных плагинов. Одним из них является GD, который можно использовать для создания изображений на лету. GD, изначально разработанная Томасом Бутелем, безусловно, является самой популярной библиотекой обработки изображений для PHP (она также доступна для других языков, таких как Perl). GD входит в состав PHP начиная с PHP версии 4.3, поэтому вполне вероятно, что на вашем PHP уже установлен GD. Вы можете запустить phpinfo(), чтобы увидеть, установлен ли GD — на приведенном ниже экране показано, что он установлен.

Хотя возможность манипулирования и создания изображений скоро будет заменена HTML5, GD по-прежнему полезен во многих случаях. Например, чтобы предотвратить сохранение исходного изображения путем добавления водяного знака, поскольку PHP работает на стороне сервера, исходное изображение никогда не попадает на компьютер пользователя и никогда не будет в кеше пользователя.

Пример 1: Создание изображения

Ниже я создал изображение с использованием GD и вывел изображение в формате .jpeg. Я создал очень простое изображение размером 300×200 пикселей с красным прямоугольником в центре. Обратите внимание, что первый вызов imageColorAllocate() устанавливает цвет фона изображения.

<?php
   // Создать изображение с указанными размерами
   $image = imageCreate(300,200);
 
   // Создать цвет (это первый вызов imageColorAllocate
   // также автоматически устанавливает цвет фона изображения)
   $colorRed = imageColorAllocate($image, 255,0,0);
   // Создать другой цвет
   $colorYellow = imageColorAllocate($image, 255,255,0);
 
   // Нарисуйте прямоугольник
   imageFilledRectangle($image, 50, 50, 250, 150, $colorYellow);
 
   // Установите тип изображения и отправьте вывод
   header("Content-type: image/jpeg");
   imageJpeg($image);
 
   // Освободить память
   imageDestroy($image);
?>

Как встроить это изображение в HTML? Используйте тег
как обычно, но вместо того, чтобы устанавливать src с именем файла изображения, введите имя сценария с параметрами (GET), если необходимо. Например, приведенный выше скрипт называется example1.php, тогда тег будет выглядеть следующим образом:

<img src="/example1.php" />

Пример 2: Текст

Простейшее рисование текста можно сделать с помощью этой функции:

imageString($image, $fontId, $y, $, $text, $color);

Где $fontId — это число от 1 до 5, если вы хотите использовать один из встроенных шрифтов GD. Вы можете загрузить шрифт и получить идентификатор, используя imageLoadFont(), если вы хотите более необычный шрифт.
В приведенном ниже примере я создал очень простое изображение размером 300×75 пикселей с синим текстом.

Купить квартиру в Камышине

<?php
   $text=$_GET['messageText'];
 
   // Установить текст по умолчанию, если ничего не указано
   if (strlen($text)<=0)
      $text="No message specified.";
 
   // Создать изображение с указанными размерами
   $image = imageCreate(300,75);
 
    $color = imageColorAllocate($image, 200,200,200);
    // Создать цвет
    $colorBlue= imageColorAllocate($image, 0,0,255);
 
   // Нарисовать строку
   imageString($image, 2, 10, 30, $text, $colorBlue);
 
   // Установить тип изображения и вывести
   header("Content-type: image/jpeg");
   imageJpeg($image);
 
   // Освободить память
   imageDestroy($image);
?>

Пример 3: Параметры

Получение параметров на самом деле ничем не отличается от того, как вы это делаете с обычным PHP-скриптом, используя $ _GET или $ _POST (очевидно, вы не можете использовать POST при встраивании в тег , но вы можете это сделать, если используете формы).

Тег изображения ниже считывает текст из строки запроса (переменная $ _GET):

<img src="/example2.php?messageText="This%20text%20is%20passed%20via%20query%20string"></img>

Пример 4: Качество изображения

При экспорте в формат .jpeg качество изображения не очень хорошее. Чтобы это исправить, вы можете установить качество изображения в imagejpeg ($ image [, $ filename [, $ quality]]). Имя файла может быть установлено в NULL, если вам это не нужно.

Ниже приведены два файла JPEG с качеством изображения, установленным на 50 и 100 (большее число обеспечивает лучшее качество, но больший размер файла). Основная часть кода такая же, как и выше, с основным отличием imageJpeg ($ image, NULL, 50):

<?php
   $text=$_GET['text'];
 
   // Создать изображение с указанными размерами
   $image = imageCreate(300,75);
 
   // Создать цвет
   $colorYellow = ImageColorAllocate($image, 255,255,0);
 
   // Нарисовать прямоугольник
   ImageFilledRectangle($image, 50, 50, 200, 100, $yellowColor);
 
   // Установить тип изображения и вывести
   Header("Content-type: image/jpeg");
   ImageJpeg($image);
 
   // Освободить память
   ImageDestroy($image);
?>

Пример 5: Обработка/манипулирование файлами изображений

Здесь мы демонстрируем, как загрузить файл изображения и обработать изображение. Для загрузки изображений есть несколько функций, в зависимости от типа файла: imagecreatefrompng(), imagefromjpeg(), imagefromgif() и так далее. В этом примере мы собираемся загрузить изображение, а затем повернуть его с помощью imageRotate(). На этот раз мы также выводим изображение в формате PNG, просто для демонстрации (формат ввода и вывода не должен совпадать).

<?php
   // Создать изображение с указанными размерами
   $image = imagecreatefromjpeg("S.jpg");
 
   // Создать цвет
   $colorYellow = imageColorAllocate($image, 255,255,0);
 
   // Повернуть
   $image=imagerotate($image, 40, $colorYellow);
 
   // Установить тип изображения и вывести
   header("Content-type: image/png");
   imagePng($image);
 
   // Освободить память
   imageDestroy($image);
?>

Пример 6: Добавление водяного знака (Watermark) к изображениям

Для водяного знака рекомендуется использовать формат .png, поскольку он не ограничен 256 цветами, такими как GIF, и сжимается лучше, чем большинство .jpg.

Чтобы разместить водяной знак, вам необходимо получить размеры изображения с помощью функций imagesx($image) и imagesy ($ image). В приведенном ниже примере я размещаю водяной знак в правом нижнем углу:

<?php
   // Установить изображение, в которое будет вставлен водяной знак
   $image = imagecreatefromjpeg($_GET['imageURL']);
 
   // Установить водяной знак
   $logoImage = imagecreatefrompng("logo.png");
   imagealphablending($logoImage, true);
 
   // Получить размеры
   $imageWidth=imagesx($image);
   $imageHeight=imagesy($image);
 
   $logoWidth=imagesx($logoImage);
   $logoHeight=imagesy($logoImage);
 
   // Добавить водяной знак
   imagecopy(
      // назначение
      $image,
      // источник
      $logoImage,
      // назначение x и y
      $imageWidth-$logoWidth, $imageHeight-$logoHeight,
      // источник x и y
      0, 0,
      // ширина и высота области источника для копирования
      $logoWidth, $logoHeight);
 
   // Установить тип изображения и вывести
   header("Content-type: image/png");
   imagePng($image);
 
   // Освобождение памяти
   imageDestroy($image);
   imageDestroy($imageLogo);
?>
Если вам понравилась статья, вы можете отблагодарить автора любой суммой, какую сочтете для себя приемлемой:
Остались вопросы по статье? Задайте их прямо сейчас!
Похожие записи
Файл менеджер PHP одним файлом

Очень нужная и удобная вещь phpFileManager. Это полноценный инструмент для управления файловой системой из одного файла с множеством функций и поддержкой русского языка. Это инструмент, предназначенный для быстрого управления файлами, а также для проверки конфигурации и безопасности PHP-сервера. Единственный PHP-файл Читать далее

Простая интеграция Яндекс.Кассы на PHP

На сегодняшний день Яндекс.Касса - это один из самых популярных мерчантов для подключения оплаты на любом сайте. Касса позволяет принимать платежи с помощью банковских карт и Яндекс.Денег, а так же подключить онлайн-кассу. Если у вас интернет-магазин на одной из популярных Читать далее

Как создать чат-бота ВКонтакте

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

Вывод постов из Instagram на сайт с помощью API

У инстраграма нет готового виджета для вывода постов на сайте. В прошлой статье мы рассматривали как создать Instagram виджет для сайта с помощью конструктора. Это самый простой и быстрый способ, и на мой взгляд самый лучший. Единственный его минус, как Читать далее

PHP классы, объекты, методы

Абсолютно любой предмет из нашей жизни мы можем описать по его характеристикам и состоянию, а так же воздействовать на это состояние. Например, ваш автомобиль имеет определенный цвет, марку, двигатель и т.д. Кроме того он может ехать, стоять, набирать или сбавлять Читать далее

Удалить значение из массива на PHP

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

Создание чат-бота для Viber

В этой статье рассмотрим как создать простого чат-бота для Viber, который будет принимать и отправлять сообщения в чат. Шаг 1 Итак, для начала необходимо зарегистрироваться в сервисе Viber Admin Panel по этой ссылке. Шаг 2 Создаём бота. Для этого заполняем Читать далее

Один комментарий на «PHP работа с изображениями. Библиотека PHP GD»

  1. canadian online pharmacy:

    Keep this going please, great job!

Добавить комментарий

*

code