Skip to main content

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

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

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

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

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

В этой статье рассмотрим как создать простого чат-бота для Viber, который будет принимать и отправлять... Читать далее

Регулярные выражения PHP: preg_match, preg_split, preg_replace

Регулярные выражения - это мощный алгоритм сопоставления с образцом, который может быть выполнен в одном... Читать далее

Парсер XML PHP с использованием SimpleXML. Примеры

Существует несколько способов парсить XML-данные с использованием PHP, один из которых - SimpleXML. В предыдущей... Читать далее

Интеграция/чтение RSS PHP. PHP скрипт вывода RSS

В PHP начиная с 5 версии есть встроенная библиотека для работы с XML данными SimpleXML.... Читать далее

Отправка письма с вложениями на PHP и AJAX

Мы уже рассматривали, как сделать форму обратной связи на PHP и Ajax. Сегодня мы модернизируем... Читать далее

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

*

code