Библиотека GD — это мощный инструмент в PHP для работы с изображениями на лету. С её помощью можно создавать картинки с нуля, рисовать на них фигуры, писать текст, накладывать водяные знаки на существующие фотографии или даже генерировать графики и капчи.
В этом наборе заданий мы пройдем путь от самых основ до более интересных техник. Вы научитесь создавать изображение, задавать для него цвета, выводить простой текст и фигуры, а также разберетесь с правильной последовательностью действий, чтобы в итоге получить корректный графический файл, а не набор непонятных символов в браузере. Задания построены так, чтобы постепенно усложняться, закрепляя базовые концепции функций GD.
- Модуль 1: Основы синтаксиса PHP
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Модуль 4: Условные конструкции
- Модуль 5: Циклы
- Модуль 6: Массивы
- Индексированные массивы.
- Ассоциативные массивы.
- Многомерные массивы.
- Добавление элементов в массив.
- Удаление элементов из массива.
- Функция count().
- Функция array_push() и array_pop().
- Функция array_shift() и array_unshift().
- Функция array_merge().
- Функция array_slice().
- Функция array_splice().
- Функция in_array().
- Функция array_search().
- Функция array_keys() и array_values().
- Функция array_unique().
- Функция array_reverse().
- Сортировка: sort(), rsort().
- Сортировка: asort(), arsort().
- Сортировка: ksort(), krsort().
- Функция array_map().
- Функция array_filter().
- Функция array_reduce().
- Функция array_walk().
- Функция array_column().
- Деструктуризация массивов.
- Модуль 7: Функции
- Объявление функций.
- Вызов функций.
- Параметры функций.
- Возврат значений return.
- Значения параметров по умолчанию.
- Передача по значению.
- Передача по ссылке.
- Переменное количество аргументов.
- Оператор распаковки ....
- Типизация параметров.
- Типизация возвращаемых значений.
- Nullable типы.
- Union типы (PHP 8).
- Именованные аргументы (PHP 8).
- Анонимные функции.
- Стрелочные функции.
- Замыкания и use.
- Рекурсивные функции.
- Глобальные переменные в функциях.
- Статические переменные в функциях.
- Модуль 8: Работа со строками
- Одинарные и двойные кавычки.
- Экранирование символов.
- Heredoc и Nowdoc синтаксис.
- Функция strlen().
- Функция substr().
- Функция str_replace().
- Функция strpos() и strrpos().
- Функция explode() и implode().
- Функция trim(), ltrim(), rtrim().
- Функция strtolower() и strtoupper().
- Функция ucfirst() и ucwords().
- Функция str_repeat().
- Модуль 9: Суперглобальные переменные
- Модуль 10: Работа с формами
- Модуль 11: Работа с файлами
- Модуль 12: Дата и время
- Модуль 13: Регулярные выражения
- Модуль 14: Сессии и Cookie
- Модуль 15: Include и Require
- Модуль 16: Объектно-ориентированное программирование
- Модуль 17: Пространства имен
- Модуль 18: Обработка ошибок и исключений
- Модуль 19: Работа с JSON и XML
- Модуль 20: Работа с базами данных MySQLi
- Модуль 21: PDO - PHP Data Objects
- Модуль 22: Composer и зависимости
- Модуль 23: cURL и HTTP запросы
- Модуль 24: REST API
- Модуль 25: Безопасность
- Модуль 26: Генераторы и итераторы
- Модуль 27: Reflection API
- Модуль 28: Работа с изображениями
- GD библиотека.
- Модуль 29: Отправка email
- Модуль 30: Паттерны проектирования
- Модуль 31: Тестирование
- Модуль 32: Продвинутые возможности PHP 8+
Сопоставьте функцию GD с её назначением
Каждая программа, работающая с изображениями в GD, использует определённый набор функций для разных этапов. Сопоставьте названия ключевых функций из левой колонки с их описанием в правой, чтобы выстроить логическую цепочку работы с изображением.
imagecreatetruecolor()imagecolorallocate()imagepng()imagedestroy()Создание простого изображения
Напишите код, который создаёт изображение размером 300x150 пикселей. Для этого нужно использовать соответствующую функцию. Затем выделите красный цвет и заполните им всё изображение. В конце не забудьте вывести результат.
<?php
header("Content-Type: image/png");
// Создаём изображение 300x150
$image = input1S(300, 150);
// Выделяем красный цвет
$red = imagecolorallocate($image, input2S, 0, 0);
// Заливаем фон
imagefill($image, 0, 0, $red);
// Выводим изображение
input3S($image);
// Освобождаем память
imagedestroy($image);
?>Исправьте ошибку в заголовке
При попытке вывести изображение браузер показывает "битую картинку" и странный текст. Это происходит из-за того, что браузер не понимает, что ему прислали именно изображение. Найдите и исправьте ошибку в строке, которая отвечает за информирование браузера о типе контента.
<?php// Отправляем заголовок, чтобы браузер понял, что это изображениеheader('Content: image/jpeg'); $img = imagecreatetruecolor(120, 20);$text_color = imagecolorallocate($img, 255, 255, 255);imagestring($img, 1, 5, 5, 'A Simple Text String', $text_color); imagejpeg($img);imagedestroy($img);?>Восстановите порядок действий
Перед вами — перемешанные строки кода. Расставьте их в правильном порядке, чтобы получился скрипт, который создаёт чёрное изображение и рисует на нём одну белую горизонтальную линию. Помните о логике: создание, выделение ресурсов, рисование, вывод, очистка.
imagedestroy($image);imageline($image, 10, 100, 390, 100, $white);header('Content-Type: image/png');$image = imagecreatetruecolor(400, 200);imagepng($image);$white = imagecolorallocate($image, 255, 255, 255);$black = imagecolorallocate($image, 0, 0, 0);imagefill($image, 0, 0, $black);Наложение текста на изображение из банка
Заполните пропуски в коде, используя элементы из банка. Скрипт должен создавать изображение, выделять два цвета (для фона и для текста) и выводить на нём фразу "PHP & GD". Используйте функцию для вывода текста со шрифтом TrueType.
<?php
header('Content-Type: image/png');
$im = imagecreatetruecolor(400, 100);
$bg_color = imagecolorallocate($im, 240, 240, 240); // Светло-серый фон
imagefill($im, 0, 0, $bg_color);
$text_color = input1S($im, 50, 50, 50);
$font_path = './arial.ttf'; // Условный путь к шрифту
$text = input2S;
input3S($im, 24, 0, 20, 65, $text_color, $font_path, $text);
imagepng($im);
imagedestroy($im);
?>Сборка скрипта для водяного знака
Соберите работающий скрипт из предложенных фрагментов. Цель скрипта — открыть существующий файл 'nature.jpg', наложить на него в левом верхнем углу текстовый водяной знак "© MySite" белого цвета и вывести результат в браузер как JPEG изображение. Некоторые фрагменты лишние или содержат ошибки.
$white = imagecolorallocate($image, 255, 255, 255);header('Content-Type: image/jpeg');imagedestroy($image);$image = imagecreatefromjpeg('nature.jpg');imagepng($image);imagestring($image, 5, 10, 10, '© MySite', $white);imagejpeg($image);$image = imagecreatetruecolor(600, 400);Создание полупрозрачного водяного знака
Чтобы водяной знак не перекрывал изображение полностью, его часто делают полупрозрачным. Дополните код, чтобы создать чёрный цвет с 50% прозрачностью и нарисовать им прямоугольник. Для 50% прозрачности используйте значение альфа-канала 64.
<?php
header('Content-Type: image/png');
$image = imagecreatefrompng('logo.png');
// Чёрный цвет с 50% прозрачностью (альфа = 64)
$black_alpha = input1S($image, 0, 0, 0, input2S);
// Рисуем полупрозрачный прямоугольник внизу
input3S($image, 0, 150, 200, 200, $black_alpha);
imagepng($image);
imagedestroy($image);
?>Ошибка в параметрах копирования изображения
В этом коде есть ошибка в одной из самых мощных функций GD - imagecopyresampled. Скрипт пытается скопировать исходное изображение ($src) целиком в область назначения ($dst) размером 150x150 пикселей. Однако из-за ошибки в параметрах результат будет искаженным. Найдите и исправьте строку с ошибкой.
<?php// Создаем исходное и целевое изображения (условно)$src = imagecreatetruecolor(800, 600);$dst = imagecreatetruecolor(150, 150);$src_w = imagesx($src);$src_h = imagesy($src); // Копируем с изменением размераimagecopyresampled($dst, $src, 0, 0, 0, 0, $src_w, $src_h, 150, 150); header("Content-Type: image/png");imagepng($dst);imagedestroy($src);imagedestroy($dst);?>