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 отправляющий сообщения с сайта

Что если сообщения с сайта будут приходить не только на ваш e-mail, но и моментально в мессенджер телеграм. Удобно же! Нужно было реализовать такой функционал, ну как и всегда все оказалось довольно просто. Так же стояла задача отправлять сообщения не Читать далее

Отправка формы без перезагрузки страницы на PHP и Ajax

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

Вывести на PHP месяц и день недели на русском

Довольно часто приходится сталкиваться с выводом названий месяцев и дней недели по-русски. При чем в различных вариантах, к примеру с полным названием или сокращенным, с большой буквы или с маленькой. Можно воспользоваться одним из этих 2 вариантов для вывода даты Читать далее

Парсер яндекс погоды на PHP

Рабочий пример PHP парсера, который получает погоду с Яндекса по ID города. Скрипт сохраняет данные в файле кеша на сайте, и обновляет его раз в час. Так же расскажу как выводить на сайте собственные иконки погоды вместо стандартных от Яндекса. Читать далее

Как встроить видео с YouTube канала на сайт

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

Курсы доллара и евро с сайта Центробанка на PHP

Парсер получает курсы доллара и евро с сайта Центробанка каждые 24 часа и записывает их в файл кеша /log/course.txt Скрипт полностью готов к работе и не требует каких-либо дополнительных настроек. <? function loadCourse(){ define("tsCourse","15:00:00"); # Время смены курса центральным банком Читать далее

Календарь на PHP и Ajax

Пример календаря на PHP и Ajax с переключением месяцев. Можно использовать как заготовку для решения любых задач. Я использовал его для создания плагина календаря мероприятий на WordPress. Скрипт использует процедурный подход, но имеет разделенную структуру с шаблоном , что довольно Читать далее

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

  1. canadian online pharmacy:

    Keep this going please, great job!

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