GD библиотека

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

Библиотека GD — это мощный инструмент в PHP для работы с изображениями на лету. С её помощью можно создавать картинки с нуля, рисовать на них фигуры, писать текст, накладывать водяные знаки на существующие фотографии или даже генерировать графики и капчи.

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

Список тем

Сопоставьте функцию GD с её назначением

id: 39335_task_gd_1

Каждая программа, работающая с изображениями в GD, использует определённый набор функций для разных этапов. Сопоставьте названия ключевых функций из левой колонки с их описанием в правой, чтобы выстроить логическую цепочку работы с изображением.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
imagecreatetruecolor()
imagecolorallocate()
imagepng()
imagedestroy()
Выделяет цвет для использования на изображении
Создаёт новый ресурс полноцветного изображения
Освобождает память, занятую ресурсом изображения
Выводит изображение в формате PNG в браузер или файл
Сообщения
Проверить
Показать подсказку

Создание простого изображения

id: 39335_task_gd_2

Напишите код, который создаёт изображение размером 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);
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Исправьте ошибку в заголовке

id: 39335_task_gd_3

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

Найдите ошибку и исправьте
<?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);
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Восстановите порядок действий

id: 39335_task_gd_4

Перед вами — перемешанные строки кода. Расставьте их в правильном порядке, чтобы получился скрипт, который создаёт чёрное изображение и рисует на нём одну белую горизонтальную линию. Помните о логике: создание, выделение ресурсов, рисование, вывод, очистка.

Расставьте строки в правильном порядке
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);
Сообщения
Проверить
Показать подсказку

Наложение текста на изображение из банка

id: 39335_task_gd_5

Заполните пропуски в коде, используя элементы из банка. Скрипт должен создавать изображение, выделять два цвета (для фона и для текста) и выводить на нём фразу "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);
?>
imagettftext
'PHP & GD'
imagecolorallocate
'Hello World'
imagestring
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сборка скрипта для водяного знака

id: 39335_task_gd_6

Соберите работающий скрипт из предложенных фрагментов. Цель скрипта — открыть существующий файл '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);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Создание полупрозрачного водяного знака

id: 39335_task_gd_7

Чтобы водяной знак не перекрывал изображение полностью, его часто делают полупрозрачным. Дополните код, чтобы создать чёрный цвет с 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);
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Ошибка в параметрах копирования изображения

id: 39335_task_gd_8

В этом коде есть ошибка в одной из самых мощных функций 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);
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру