PHP: полный мануал с примерами, функциями и ООП
Практический мануал PHP: от переменных и читаемого кода до безопасных форм, интеграций, базы данных и ООП на примере магазина. Учебный маршрут, поиск функций, подробные примеры, разбор ошибок и исходники для скачивания.

Дерево руководства
Глава 134 · От первого пикселя к полному API
GD: создаём картинки, превью и водяные знаки — практика и полный справочник
Все функции, два класса и константы GD: создание, цвета и прозрачность, фигуры, шрифты, преобразования, кодеки, IPTC и границы безопасной обработки.
Сделаем картинку, которую можно сохранить и показать на сайте
Пусть для каталога нужна плашка «новая коллекция»: цветной фон, подпись и круглый акцент. В графическом редакторе её можно нарисовать вручную. GD позволяет описать тот же рисунок в PHP и получать новые файлы при изменении надписи, цвета и размеров. Ниже сначала готовый результат, затем четыре небольших шага, которые его собирают.
Скачать PNGДальше обработаем узнаваемую карточку товара: обрежем поля, уменьшим, получим серую версию и поставим полупрозрачную подпись. Исходник и результат каждого действия видны рядом; PNG и код можно скачать. Для мелких учебных холстов показано увеличение: сами файлы сохраняют настоящие размеры.
Пиксель — одна маленькая цветная точка изображения. Холст похож на лист в клетку, но размер задаётся числом пикселей, а не сантиметрами. Объект GdImage — рабочее изображение в памяти; файл PNG — сохранённый результат. PHP не отправляет картинку браузеру только от того, что вы создали $image.
Для запуска нужен установленный PHP с расширением GD. Как проверить и включить GD. Создайте отдельную папку gd-lesson, сохраните код как example.php и запустите в этой папке php example.php. Файл badge.png появится рядом; откройте его двойным щелчком. На сервере у PHP должны быть права записи в выбранный каталог. Для первых шагов веб-сервер не требуется.
Блок кода включает <?php — начало PHP — и declare(strict_types=1);, который включает строгую проверку передаваемых типов. Сохраните обе строки. Для первого рисунка важнее следующие четыре действия; строгие типы подробно разбираются в главе о значениях и типах.
Шаг 1. Четыре действия — и у нас есть синий PNG
Начнём с прямоугольной основы будущей плашки. Здесь 240 пикселей по горизонтали и 100 по вертикали. На белой странице сразу видно, появился ли файл правильного цвета и размера.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(240, 100);
$blue = imagecolorallocate($image, 25, 105, 175);
imagefill($image, 0, 0, $blue);
imagepng($image, "badge.png");
Текстовая проверка результата
Текст в консоли не появляется: полезный результат — файл badge.png. Картинка выше получена из этого кода. Откройте файл: должен быть синий прямоугольник без надписи.
| Строка | Что именно происходит |
|---|---|
$image = imagecreatetruecolor(240, 100); | Знак $ начинает имя переменной; = сохраняет результат справа под именем слева. imagecreatetruecolor — имя готового инструмента, функции. В круглых скобках её аргументы: сначала ширина 240, затем высота 100. Запятая разделяет аргументы. Точка с запятой завершает команду. Полученный холст пока чёрный. |
$blue = imagecolorallocate($image, 25, 105, 175); | Создаём обозначение цвета для этого холста и сохраняем его в $blue. После холста переданы три компонента: красная 25, зелёная 105, синяя 175. Каждая от 0 до 255. Выбор цвета ещё ничего не закрашивает. |
imagefill($image, 0, 0, $blue); | Закрашиваем одноцветную область, начиная с точки x=0, y=0. Это верхний левый угол. У нового пустого холста область занимает весь прямоугольник. Последний аргумент указывает подготовленный синий цвет. |
imagepng($image, "badge.png"); | Кодируем пиксели в PNG и записываем файл с указанным именем. Кавычки обозначают строку, то есть текст имени. Имя файла и переменная $image — разные вещи. |
Проверьте себя: замените 240, 100 на 120, 100. Плашка станет вдвое уже, но не вдвое меньше по обеим осям. Затем верните ширину и замените компоненты цвета на 160, 65, 40: изменится цвет, размеры останутся прежними. Если файла нет, смотрите ошибку запуска и права каталога; пустая консоль сама по себе ошибкой не является.
Ссылки для справки: imagecreatetruecolor, imagecolorallocate, imagefill, imagepng.
Шаг 2. Добавим читаемую подпись
Чтобы картинка сообщала что-то человеку, добавим слова NEW COLLECTION. Теперь нужен второй цвет и одна новая операция — рисование строки. Фон мы уже умеем получать. Подпись рисуем до сохранения, иначе в файле останется только фон.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(240, 100);
$blue = imagecolorallocate($image, 25, 105, 175);
imagefill($image, 0, 0, $blue);
$white = imagecolorallocate($image, 255, 255, 255);
imagestring($image, 5, 20, 42, "NEW COLLECTION", $white);
imagepng($image, "badge.png");
Текстовая проверка результата
Встроенный шрифт позволяет начать без загрузки отдельного файла. Это латинская подпись; как рисовать русские слова масштабируемым шрифтом, объясняется в карточке imagettftext. Для текста интерфейса сайта обычно удобнее HTML, а растровая надпись нужна именно в скачиваемой картинке.
| Аргумент imagestring | Значение в нашем рисунке |
|---|---|
$image | Изображение, которое меняем. |
5 | Номер самого крупного из пяти встроенных шрифтов; это не пять пикселей и не размер CSS. |
20, 42 | Положение верхнего левого угла текста: 20 пикселей от левого края, 42 от верхнего. x растёт вправо, y вниз. У холста 240 × 100 последняя точка имеет координаты 239, 99. |
"NEW COLLECTION" | Содержимое строки. Переносы и подгонка длинных строк здесь не выполняются автоматически. |
$white | Цвет букв, подготовленный из трёх компонентов 255, 255, 255. |
Измените x с 20 на 60: текст сдвинется вправо. Если он перестал помещаться, верните отступ, сократите текст или увеличьте холст. GD рисует пиксели и не знает о CSS-блоках, переносах и доступности. imagestring и imagettftext показывают оба способа работы со шрифтом.
Шаг 3. Сделаем рисунок управляемым
Предположим, дизайнер просит один и тот же макет для NEW и SALE, а круг иногда должен быть крупнее. Вынесем изменяемые значения в начало программы: $label хранит слово, $radius — радиус круга. Радиус — расстояние от центра до края; функция рисования принимает полный диаметр, поэтому передаём $radius * 2. Звёздочка означает умножение.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$label = "NEW";
$radius = 18;
$image = imagecreatetruecolor(240, 100);
$background = imagecolorallocate($image, 25, 105, 175);
$white = imagecolorallocate($image, 255, 255, 255);
$accent = imagecolorallocate($image, 255, 210, 75);
imagefill($image, 0, 0, $background);
imagefilledellipse($image, 195, 50, $radius * 2, $radius * 2, $accent);
imagestring($image, 5, 20, 42, $label, $white);
imagepng($image, "badge.png");
echo "badge.png\n";
Текстовая проверка результата
badge.png
imagefilledellipse($image, 195, 50, $radius * 2, $radius * 2, $accent): холст, центр x/y, полная ширина/высота эллипса и цвет. Равные ширина и высота дают круг. С радиусом 18 получаем диаметр 36; радиус 28 даст 56. echo только сообщает имя уже записанного файла.
Новая операция imagefilledellipse добавляет жёлтый круг поверх синего фона. Меняется тот же холст; функция не создаёт второй PNG. Порядок имеет значение: если закрасить фон после круга и текста, вы закроете уже нарисованное.
Следующий блок позволяет менять три настройки и сразу сравнивать изображения. Это заранее выполненные варианты того же PHP, а не имитация рисунка средствами CSS. У каждого варианта доступны его точный код и PNG; работающий серверный генератор с формой будет следующим шагом.
Попробуйте: цвет, надпись и размер → свой PNG
Синий фон · NEW · радиус 18 пикселей
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$label = "NEW";
$radius = 18;
$image = imagecreatetruecolor(240, 100);
$background = imagecolorallocate($image, 25, 105, 175);
$white = imagecolorallocate($image, 255, 255, 255);
$accent = imagecolorallocate($image, 255, 210, 75);
imagefill($image, 0, 0, $background);
imagefilledellipse($image, 195, 50, $radius * 2, $radius * 2, $accent);
imagestring($image, 5, 20, 42, $label, $white);
imagepng($image, "badge.png");
echo "badge.png\n";
Текстовая проверка результата
badge.png
Сравните круг и текст с предыдущим выбором. В коде изменяются только $label, $radius и три компонента фонового цвета; остальные действия сохраняют смысл.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$label = "NEW";
$radius = 28;
$image = imagecreatetruecolor(240, 100);
$background = imagecolorallocate($image, 25, 105, 175);
$white = imagecolorallocate($image, 255, 255, 255);
$accent = imagecolorallocate($image, 255, 210, 75);
imagefill($image, 0, 0, $background);
imagefilledellipse($image, 195, 50, $radius * 2, $radius * 2, $accent);
imagestring($image, 5, 20, 42, $label, $white);
imagepng($image, "badge.png");
echo "badge.png\n";
Текстовая проверка результата
badge.png
Сравните круг и текст с предыдущим выбором. В коде изменяются только $label, $radius и три компонента фонового цвета; остальные действия сохраняют смысл.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$label = "SALE";
$radius = 18;
$image = imagecreatetruecolor(240, 100);
$background = imagecolorallocate($image, 25, 105, 175);
$white = imagecolorallocate($image, 255, 255, 255);
$accent = imagecolorallocate($image, 255, 210, 75);
imagefill($image, 0, 0, $background);
imagefilledellipse($image, 195, 50, $radius * 2, $radius * 2, $accent);
imagestring($image, 5, 20, 42, $label, $white);
imagepng($image, "badge.png");
echo "badge.png\n";
Текстовая проверка результата
badge.png
Сравните круг и текст с предыдущим выбором. В коде изменяются только $label, $radius и три компонента фонового цвета; остальные действия сохраняют смысл.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$label = "SALE";
$radius = 28;
$image = imagecreatetruecolor(240, 100);
$background = imagecolorallocate($image, 25, 105, 175);
$white = imagecolorallocate($image, 255, 255, 255);
$accent = imagecolorallocate($image, 255, 210, 75);
imagefill($image, 0, 0, $background);
imagefilledellipse($image, 195, 50, $radius * 2, $radius * 2, $accent);
imagestring($image, 5, 20, 42, $label, $white);
imagepng($image, "badge.png");
echo "badge.png\n";
Текстовая проверка результата
badge.png
Сравните круг и текст с предыдущим выбором. В коде изменяются только $label, $radius и три компонента фонового цвета; остальные действия сохраняют смысл.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$label = "NEW";
$radius = 18;
$image = imagecreatetruecolor(240, 100);
$background = imagecolorallocate($image, 160, 65, 40);
$white = imagecolorallocate($image, 255, 255, 255);
$accent = imagecolorallocate($image, 255, 210, 75);
imagefill($image, 0, 0, $background);
imagefilledellipse($image, 195, 50, $radius * 2, $radius * 2, $accent);
imagestring($image, 5, 20, 42, $label, $white);
imagepng($image, "badge.png");
echo "badge.png\n";
Текстовая проверка результата
badge.png
Сравните круг и текст с предыдущим выбором. В коде изменяются только $label, $radius и три компонента фонового цвета; остальные действия сохраняют смысл.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$label = "NEW";
$radius = 28;
$image = imagecreatetruecolor(240, 100);
$background = imagecolorallocate($image, 160, 65, 40);
$white = imagecolorallocate($image, 255, 255, 255);
$accent = imagecolorallocate($image, 255, 210, 75);
imagefill($image, 0, 0, $background);
imagefilledellipse($image, 195, 50, $radius * 2, $radius * 2, $accent);
imagestring($image, 5, 20, 42, $label, $white);
imagepng($image, "badge.png");
echo "badge.png\n";
Текстовая проверка результата
badge.png
Сравните круг и текст с предыдущим выбором. В коде изменяются только $label, $radius и три компонента фонового цвета; остальные действия сохраняют смысл.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$label = "SALE";
$radius = 18;
$image = imagecreatetruecolor(240, 100);
$background = imagecolorallocate($image, 160, 65, 40);
$white = imagecolorallocate($image, 255, 255, 255);
$accent = imagecolorallocate($image, 255, 210, 75);
imagefill($image, 0, 0, $background);
imagefilledellipse($image, 195, 50, $radius * 2, $radius * 2, $accent);
imagestring($image, 5, 20, 42, $label, $white);
imagepng($image, "badge.png");
echo "badge.png\n";
Текстовая проверка результата
badge.png
Сравните круг и текст с предыдущим выбором. В коде изменяются только $label, $radius и три компонента фонового цвета; остальные действия сохраняют смысл.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$label = "SALE";
$radius = 28;
$image = imagecreatetruecolor(240, 100);
$background = imagecolorallocate($image, 160, 65, 40);
$white = imagecolorallocate($image, 255, 255, 255);
$accent = imagecolorallocate($image, 255, 210, 75);
imagefill($image, 0, 0, $background);
imagefilledellipse($image, 195, 50, $radius * 2, $radius * 2, $accent);
imagestring($image, 5, 20, 42, $label, $white);
imagepng($image, "badge.png");
echo "badge.png\n";
Текстовая проверка результата
badge.png
Сравните круг и текст с предыдущим выбором. В коде изменяются только $label, $radius и три компонента фонового цвета; остальные действия сохраняют смысл.
Упражнение: сделайте плашку SALE с терракотовым фоном и кругом диаметром 56 пикселей. Решение: $label = "SALE";, $radius = 28;, цвет фона 160, 65, 40. Затем добавьте ещё один собственный цвет. Сохраните результат под другим именем, если нужен и старый вариант.
Работающий генератор: форма отправляет параметры, PHP возвращает PNG
Теперь те же значения выберет посетитель. Скачайте архив этого примера, распакуйте в отдельную папку и выполните там php -S 127.0.0.1:8080. Откройте http://127.0.0.1:8080/index.html, поменяйте настройки и нажмите «Создать PNG». Файл index.html содержит форму, example.php — обработчик изображения. Встроенный сервер нужен для локального обучения; остановка — Ctrl+C.
- Форма: theme=clay, label=SALE, radius=28
- GET-запрос: example.php?theme=clay&label=SALE&radius=28
- PHP проверяет три значения, затем рисует привычный холст
- Content-Type: image/png + один поток PNG → браузер показывает результат
Новый источник данных — $_GET, набор параметров адреса. Запись $_GET["theme"] берёт поле theme; ?? "blue" выбирает синий по умолчанию, если поле отсутствует. Пока разрешаем только готовые варианты. Это делает интерфейс понятнее и не позволяет запросить огромный холст. Если адрес исправить вручную, проверка вернёт 400 с текстом причины. Подробности форм — в главе о формах.
Скачать PNGПолучено через локальный HTTP-запрос. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$theme = $_GET["theme"] ?? "blue";
$label = $_GET["label"] ?? "NEW";
$radius = $_GET["radius"] ?? "18";
if (!is_string($theme) || !in_array($theme, ["blue", "clay"], true)
|| !is_string($label) || !in_array($label, ["NEW", "SALE"], true)
|| !is_string($radius) || !in_array($radius, ["18", "28"], true)) {
http_response_code(400);
header("Content-Type: text/plain; charset=utf-8");
echo "Choose a listed theme, label and radius.\n";
exit;
}
$rgb = $theme === "blue" ? [25, 105, 175] : [160, 65, 40];
$radius = (int) $radius;
$image = imagecreatetruecolor(240, 100);
$background = imagecolorallocate($image, $rgb[0], $rgb[1], $rgb[2]);
$white = imagecolorallocate($image, 255, 255, 255);
$accent = imagecolorallocate($image, 255, 210, 75);
imagefill($image, 0, 0, $background);
imagefilledellipse($image, 195, 50, $radius * 2, $radius * 2, $accent);
imagestring($image, 5, 20, 42, $label, $white);
header("Content-Type: image/png");
imagepng($image);
В архиве уже есть index.html. Для прямой проверки откройте example.php?theme=clay&label=SALE&radius=28: получатся терракотовая плашка, SALE и круг радиуса 28. Картинка над кодом получена настоящим локальным HTTP-запросом к этому обработчику. Отправьте radius=9000 — вместо большого изображения получите 400 и сообщение о допустимых вариантах.
| Новая запись | Зачем она появилась |
|---|---|
is_string и in_array(..., true) | Проверяем, что пришла одна строка из разрешённого списка. HTML select помогает посетителю, но запрос можно отправить вручную. Параметр theme[]=blue будет массивом: его тоже следует отвергнуть. |
! ... || ... | ! означает «не», || — «или». Если хотя бы одно поле неверно, выполняется блок между фигурными скобками if. Он отправляет ошибку и завершает обработку командой exit. |
$theme === "blue" ? [...] : [...] | Короткий выбор одного из двух наборов RGB. === сравнивает значение и тип; ? отделяет вариант при совпадении, : — другой. Массив хранит три компонента под номерами 0, 1, 2. |
(int) $radius | Параметры адреса приходят текстом. После проверки разрешённых значений переводим "18" или "28" в целое число для рисования. |
header("Content-Type: image/png"); | Сообщаем браузеру тип ответа до отправки его тела. Следующий imagepng без имени файла пишет PNG в ответ. В этот ответ не добавляют HTML, echo с именем файла или отладочный текст. |
HTML-форма использует method="get": значения выбранных полей входят в адрес запроса. action="example.php" указывает обработчик, target="badge-result" направляет ответ в подписанную область iframe, поэтому форма остаётся на экране. Для обычной страницы с уже известными параметрами достаточно <img src="example.php?theme=blue&label=NEW&radius=18" alt="Новая коллекция">.
Следующее улучшение: добавьте третий разрешённый цвет и соответствующий пункт формы. Свободную пользовательскую подпись вводите отдельным этапом: ограничьте длину, выберите шрифт с нужными буквами и проверьте, помещается ли текст. Не принимайте из URL произвольный путь шрифта, файла или неограниченные размеры изображения.
Теперь нужен исходник: нарисуем карточку чашки
Плашку мы рисовали с нуля. Для обработки обычно нужен готовый исходник — фотография или схема. Здесь используем собственный рисунок чашки 160 × 120: синий корпус, ручка справа и подпись снизу помогают увидеть обрезку, отражение и потерю мелких деталей. Это учебный рисунок, а не фотография.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
// Учебный исходник карточки: в проекте его можно загрузить из PNG/JPEG.
$image = imagecreatetruecolor(160, 120);
$background = imagecolorallocate($image, 242, 238, 224);
imagefill($image, 0, 0, $background);
$blue = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 25, 45, 55);
imagefilledrectangle($image, 40, 20, 112, 84, $blue);
imageellipse($image, 112, 50, 36, 42, $blue);
imagestring($image, 3, 12, 99, "CUP / 1290 RUB", $ink);
imagepng($image, "product-source.png");
echo "product-source.png\n";
Текстовая проверка результата
product-source.png
imagefilledrectangle получает координаты двух противоположных углов корпуса: (40, 20) и (112, 84). imageellipse рисует только контур ручки с центром (112, 50), шириной 36 и высотой 42. Подпись находится у нижнего края. Оба цвета и сохранение PNG работают так же, как в плашке.
Следующие небольшие примеры включают файл source.php из скачиваемого архива. Он содержит показанный выше рисунок и оставляет холст в $image. Команда require "source.php"; выполняет этот PHP-файл здесь; это не скрытая библиотека. Чтобы обработать готовый PNG вместо рисунка, замените require на $image = imagecreatefrompng("product-source.png"); и положите сам PNG рядом. В рабочем приложении проверяют возможность чтения и результат декодирования.
Обрезка: оставим чашку и уберём нижнюю подпись
Обрезка выбирает прямоугольник из исходника. Она не делает предмет мельче: у чашки остаётся тот же размер в пикселях, просто холст теперь заканчивается ближе к ней. В нашем рисунке область начинается в (32, 12), её ширина 104, высота 80.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
require "source.php";
$crop = imagecrop($image, ["x" => 32, "y" => 12, "width" => 104, "height" => 80]);
imagepng($crop, "crop.png");
echo "crop.png\n";
Текстовая проверка результата
crop.png
Слева исходник 160 × 120, справа отдельный холст 104 × 80. $image не изменился; результат возвращается в $crop. Массив в квадратных скобках — набор подписанных значений: x и y — начало, width и height — размеры. Стрелка => связывает имя поля и его значение.
Почему не width = 135? Потому что ширина — число захваченных пикселей, а не правая координата. В этом случае последняя колонка области: 32 + 104 - 1 = 135. На загруженных изображениях координаты проверяют относительно imagesx и imagesy; imagecrop может вернуть false, и такой результат нельзя передать в imagepng. Для учебного исходника прямоугольник заранее известен.
Упражнение: поставьте y=30, сохранив высоту 80. Верх чашки будет отрезан, а нижняя подпись попадёт в результат. Это показывает, почему автоматический центральный квадрат не всегда подходит товару или лицу.
Масштаб: маленькое превью без растяжения
В списке товаров полная карточка занимает лишнее место. Уменьшим ширину с 160 до 80; высота станет 60, потому что соотношение сторон сохраняется. В отличие от обрезки, здесь весь рисунок и подпись остаются, но каждый элемент меньше.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
require "source.php";
$small = imagescale($image, 80);
imagepng($small, "preview.png");
echo "preview.png\n";
Текстовая проверка результата
preview.png
80 — требуемая ширина, высоту мы пропустили. GD вычисляет её пропорционально. Сохраняем $small, иначе случайно запишем исходный размер. Подпись уменьшилась вместе с чашкой и стала хуже читаться; цену каталога лучше выводить HTML-текстом рядом.
Если принудительно задать imagescale($image, 80, 80), карточка вытянется по вертикали. Когда нужен квадрат без искажения, сначала выберите квадратную область, затем уменьшите её. Для фотографии сравните imagescale с imagecopyresampled; для пиксельной схемы может подойти ближайший сосед.
Фильтр: серая версия для товара вне наличия
Серый рисунок помогает визуально отличить недоступный товар. На сайте рядом всё равно нужна надпись «нет в наличии»: один цвет не передаёт статус всем читателям. Сделаем производную и применим к ней фильтр, сохранив цветной исходник.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
require "source.php";
$small = imagescale($image, 120);
imagefilter($small, IMG_FILTER_GRAYSCALE);
imagepng($small, "unavailable.png");
echo "unavailable.png\n";
Текстовая проверка результата
unavailable.png
IMG_FILTER_GRAYSCALE — именованная настройка, константа. Она выбирает перевод в серый. Фильтр меняет сам $small; возвращаемое значение — статус, поэтому записывать $small = imagefilter(...) ошибочно. Оригинал $image остаётся цветным.
Теперь замените GRAYSCALE на IMG_FILTER_BRIGHTNESS, 20: появится ещё один аргумент — прибавка яркости. Разные фильтры принимают разные параметры, и слишком сильная коррекция уничтожает детали. Все режимы разобраны в imagefilter.
Водяной знак: сначала отдельная подпись, потом наложение
Нужно подписать карточку названием магазина. Подготовим отдельный PNG: тёмные буквы на полупрозрачной белой подложке. Затем перенесём его на карточку; через подложку будет виден синий корпус чашки. Это два понятных действия с двумя входными изображениями.
Прозрачность GD называется alpha: 0 означает полностью непрозрачный пиксель, 127 — полностью прозрачный. Режим imagealphablending($stamp, false) позволяет записывать именно выбранный alpha. imagesavealpha($stamp, true) просит сохранить его в PNG. Это разные настройки, обе нужны в этом примере.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$stamp = imagecreatetruecolor(68, 24);
imagealphablending($stamp, false);
$clear = imagecolorallocatealpha($stamp, 0, 0, 0, 127);
imagefill($stamp, 0, 0, $clear);
$veil = imagecolorallocatealpha($stamp, 255, 255, 255, 45);
imagefilledrectangle($stamp, 0, 0, 67, 23, $veil);
$ink = imagecolorallocatealpha($stamp, 20, 40, 50, 0);
imagestring($stamp, 3, 8, 5, "MY SHOP", $ink);
imagesavealpha($stamp, true);
imagepng($stamp, "stamp.png");
echo "stamp.png\n";
Текстовая проверка результата
stamp.png
Число 45 делает белую подложку частично прозрачной; буквы с alpha 0 остаются непрозрачными. Шахматная подложка страницы просвечивает через PNG и не записана в сам файл. Если поставить alpha 127 для белого, под буквами совсем не останется белой плашки.
Скачать PNG
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
require "source.php";
require "stamp.php";
$stamp = imagecreatefrompng("stamp.png");
imagealphablending($image, true);
imagecopy($image, $stamp, 78, 66, 0, 0, 68, 24);
imagepng($image, "signed.png");
echo "signed.png\n";
Текстовая проверка результата
signed.png
$image — получатель, $stamp — источник. 78,66 — место вставки на карточке; 0,0 — начало внутри подписи; 68,24 — размеры переносимой области. Blending включён именно у получателя: его пиксели смешиваются с полупрозрачной подложкой. imagecopymerge с процентом не является заменой прозрачности PNG.
Почему координаты не взяты наугад? От правого края отступ 14: 160 - 68 - 14 = 78. От нижнего края 30: 120 - 24 - 30 = 66. Когда размеры меняются, считайте их через imagesx/imagesy и проверяйте, что знак помещается. Сохраняйте подписанную производную отдельно: убрать уже смешанные пиксели без исходника нельзя.
В браузере пусто: найдём неисправный шаг
Значок повреждённой картинки не сообщает, что именно сломалось. Это может быть ошибка PHP вместо PNG, неверный адрес, отсутствие GD в веб-процессе или примесь текста к байтам изображения. Сначала отделим получение файла от доставки в браузер.
- Запуск PHP: есть ли GD и ошибки в журнале?
- Файл: появился ли badge.png и открывается ли отдельно?
- HTTP: прямой адрес обработчика даёт 200 и Content-Type image/png?
- Байты: ответ начинается PNG, без HTML/echo/BOM перед ним?
- HTML: img.src ведёт именно на этот адрес?
| Что видит человек | Что проверить и исправить |
|---|---|
| Скачанный PNG исправен, браузер показывает ошибку | Проверьте само тело HTTP-ответа, а не только файл на диске. Уберите отладочный echo, HTML, случайный пробел до <?php и BOM. PHP-файл с одними командами удобно закончить без закрывающего ?>. Content-Type лишь сообщает тип; он не превращает предупреждение PHP в изображение. |
| Работает локально, белый экран на сервере | Сравните расширения и php.ini именно CLI и веб-процесса. Проверьте путь и права чтения файла. Для своего локального изображения используйте известный путь на диске, а не HTTP-запрос к тому же сайту: URL добавляет зависимость от сети и настроек wrapper. |
| Вместо рисунка символы PNG/IHDR или JFIF | Байты изображения попали в HTML-страницу либо MIME не соответствует кодировщику. Дайте картинке отдельный адрес и подключите его через img; PNG требует image/png, JPEG — image/jpeg. |
| Первое изображение есть, второе исчезло | Два imagepng без имени файла подряд не означают две картинки в одном обычном PNG-ответе. Создайте два HTTP-адреса либо два файла и два img; для одного результата сначала соедините холсты. |
| Исчезла прозрачность, виден чёрный фон | Проверьте alpha в памяти после каждого преобразования и в заново открытом PNG. Во время подготовки прозрачного слоя выключите blending; перед записью включите savealpha. При наложении на непрозрачную карточку blending получателя, наоборот, нужен. JPEG не хранит прозрачность. |
| Изменился цвет при копировании | Проверьте imageistruecolor у получателя. Палитра ограничивает набор доступных цветов. Для фотографии и прозрачного наложения используйте truecolor; конвертация не восстанавливает уже потерянные оттенки. |
Эти ситуации встречаются в реальных обсуждениях: исправный файл и неработающий HTTP-вывод, разница окружений и два вывода в одном ответе, пустой значок вместо сообщения об ошибке, бинарный вывод внутри CMS, посторонний пробел перед PNG. Это источники постановок задач; приведённый здесь код написан заново. Контракты сверены с imagepng, imagesavealpha и imagealphablending.
Не скрывайте причину символом @. В рабочем PNG-обработчике предупреждения записывайте в журнал, а при неуспехе возвращайте понятный HTTP-статус и текстовую ошибку до отправки картинки. Не добавляйте отладочный var_dump внутрь готового PNG-ответа. Для прозрачности нельзя механически копировать любую пару true/false: сначала определите, создаёте ли прозрачный слой или накладываете его на фон.
Установка, кодеки и разница CLI/FPM
GD — расширение PHP поверх libgd, а FreeType, libpng, libjpeg, libwebp и libavif добавляют конкретные возможности. Наличие PHP не означает наличие GD. Официальная минимальная внешняя libgd —2.1.0, либо bundled-поставка PHP; для GD требуется zlib≥1.2.0.4. Готовые пакеты дистрибутива обычно собирают зависимости за вас.
| Ситуация | Действие и причина |
|---|---|
| Windows PHP8 | Подключить совместимый php_gd.dll через extension=gd в правильном php.ini; совпадение версии PHP, архитектуры, TS/NTS обязательно. До PHP8 библиотека называлась php_gd2.dll. Перезапустить обслуживающий PHP процесс. |
| Linux/контейнер | Установить пакет GD для используемой версии PHP или включить расширение при сборке образа. Не копировать случайную.so/.dll между несовместимыми версиями. |
| Сборка PHP7.4+ | --enable-gd включает расширение; --with-external-gd выбирает внешнюю libgd. Старое --with-gd заменено. --with-jpeg, --with-webp, --with-xpm, --with-freetype (через pkg-config), --with-avif (PHP8.1+) включают дополнительные возможности. |
| Старые configure ключи | --with-jpeg-dir, --with-webp-dir, --with-xpm-dir, --with-freetype-dir заменены в 7.4. --with-png-dir/--with-zlib-dir удалены: libpng/zlib обязательны. --enable-gd-native-ttf не имел эффекта и удалён в 7.2. |
| Зависимости сборки | libpng должна соответствовать версии, связанной с GD; сборка libjpeg для PHP может требовать --enable-shared. XPM зависит от X библиотек; TrueType от FreeType2. Список кодеков проверяют после сборки, а не по одному номеру GD. |
| В консоли работает, на сайте нет | CLI и PHP-FPM/Apache могут читать разные ini и иметь разные расширения. Проверяйте PHP_SAPI, php_ini_loaded_file и extension_loaded именно в том процессе, который генерирует изображение. Диагностику с путями не оставляйте публичной. |
<?php
declare(strict_types=1);
if (!extension_loaded("gd")) {
echo "GD missing: enable the extension first.\n";
exit;
}
echo "GD loaded\n";
echo (gd_info()["FreeType Support"] ?? false) ? "FreeType available\n" : "bitmap only\n";
Ожидаемый результат
GD loaded
FreeType available
При включённом GD появятся GD loaded и наличие FreeType. Без расширения будет только GD missing: enable the extension first., затем программа завершится до вызова gd_info. В учебной проверке DLL загружена только для процесса; глобальный php.ini не изменяется. На вашем сервере требуется собственная настройка.
Для картинки не нужно называть любую зависимость «GD2»: это историческое имя DLL/формата, а не универсальное название текущего расширения. gd_info перечисляет фактические возможности, imagetypes даёт битовую маску поддерживаемых типов.
Настройки ошибок JPEG и памяти
| Настройка | Действие |
|---|---|
| gd.jpeg_ignore_warning | bool, default 1, INI_ALL. Игнорирует предупреждения libjpeg(-turbo), но не ошибки. До 7.1 default был 0. Это не делает повреждённое изображение корректным. |
| memory_limit | GD требует память распакованных пикселей и промежуточных изображений. Повышайте лимит только вместе с ограничениями загрузки, числа пикселей и параллельных задач; один сжатый JPEG может занимать очень много памяти. |
| Смежные настройки | EXIF имеет собственные настройки. Upload лимиты, open_basedir, разрешённые streamwrappers и права каталогов — отдельные границы; GD не заменяет их. |
<?php
declare(strict_types=1);
$previous = ini_set("gd.jpeg_ignore_warning", "0");
try { echo ini_get("gd.jpeg_ignore_warning"), "\n"; }
finally { if ($previous !== false) { ini_set("gd.jpeg_ignore_warning", $previous); } }
Ожидаемый результат
0
В обычном приложении предупреждение нужно обработать и записать в журнал. Подавление через@не является проверкой результата.
GdImage и GdFont: непрозрачные объекты и старые ресурсы
«Непрозрачный» класс здесь означает, что внутренние пиксели/таблицы скрыты от PHP-свойств. GdImage final появился в PHP8.0 вместо gd resource, GdFont final в 8.1 вместо старого идентификатора/ресурса шрифта. У них нет пользовательского набора публичных методов и свойств: работа идёт через функции GD. Нельзя создать корректный холст простым new GdImage(); нужны фабрики imagecreatetruecolor и imageloadfont.
| Объект | Как использовать |
|---|---|
| GdImage | Храните в переменной, передавайте image функциям; присваивание второй переменной сохраняет ссылку на тот же объект. Для самостоятельной копии создайте новый холст и скопируйте пиксели. |
| GdFont | Получается из imageloadfont, передаётся imagefontwidth/imagefontheight/imagestring и похожим функциям. FreeType принимает.ttf путь и не требует GdFont. |
| Сериализация и копирование | Не сохраняйте GD объект через serialize в сессию/очередь. Кодируйте изображение в PNG/WebP и сохраняйте путь или байты с лимитами. Для нового изображения не используйте clone. |
| Освобождение | В PHP 8 imagedestroy ничего не освобождает, с 8.5 deprecated. Удаляйте ненужные ссылки и не держите все исходники пакета одновременно; пока другие переменные ссылаются на объект, он нужен. |
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(2, 2);
$same = $image;
$red = imagecolorallocate($same, 255, 0, 0);
imagesetpixel($same, 0, 0, $red);
echo imagecolorsforindex($image, imagecolorat($image, 0, 0))["red"], "\n";
Текстовая проверка результата
255
Изменение через same видно через image. Это объясняет, почему вариант фото нужно копировать отдельно.
<?php
declare(strict_types=1);
try { $image = new GdImage(); } catch (Error $error) { echo "use image factory\n"; }
$image = imagecreatetruecolor(2, 2);
echo get_class($image), "\n";
Ожидаемый результат
use image factory
GdImage
Здесь исключение показано только для понимания контракта класса; оно не требуется в обычном корректном первом примере.
Выбрать путь под реальную задачу
| Нужен результат | Последовательность |
|---|---|
| Превью фотографии | getimagesize → лимиты → декодер по MIME → imagescale или imagecopyresampled → JPEG/WebP/AVIF. |
| Прозрачный значок | imagecreatetruecolor → imagealphablendingfalse → цвет с alpha127 → imagesavealpha → PNG. |
| Аватар-квадрат | imagecropцентра/выбранной области → imagescale → сохранение производной. |
| Логотип на фото | imagecreatefrompngлоготипа → координаты из размеров → imagecopyс alpha → кодирование. |
| Подпись на русском | imagettfbboxс UTF-8 совместимым.ttf → расчёт baseline → imagettftext. Bitmap шрифты 1..5 не подходят для UTF-8 кириллицы. |
| Метаданные архива | getimagesizeс image_info → APP13 → iptcparse; для сохранения iptcembed. |
| Анимация, CMYK/ICC или гигантский tiled растр | GD не является универсальным редактором таких файлов. Выбирайте библиотеку под требуемый формат, управление цветом и потоковую обработку; не обещайте сохранение исходного контейнера. |
Все константы: форматы, цвета, ядра и режимы
Константа — именованное значение, которое помогает читать вызов. Здесь несколько независимых групп: IMG_*биты возможностей, IMAGETYPE_*одиночные форматы, специальные цвета, режимы и маски PNG/ARC. Совпадение чисел не делает их взаимозаменяемыми. Константы расширения появляются только после загрузки GD.
| Константа в PHP8.5.11 | Назначение и точный потребитель |
|---|---|
IMG_AVIF = 256 | Бит поддержки AVIF; не числовой IMAGETYPE_тип. imagetypes |
IMG_GIF = 1 | Бит поддержки GIF; не числовой IMAGETYPE_тип. imagetypes |
IMG_JPG = 2 | Бит поддержки JPG; не числовой IMAGETYPE_тип. imagetypes |
IMG_JPEG = 2 | Бит поддержки JPEG (алиас IMG_JPG). imagetypes |
IMG_PNG = 4 | Бит поддержки PNG; не числовой IMAGETYPE_тип. imagetypes |
IMG_WBMP = 8 | Бит поддержки WBMP; не числовой IMAGETYPE_тип. imagetypes |
IMG_XPM = 16 | Бит поддержки XPM; не числовой IMAGETYPE_тип. imagetypes |
IMG_WEBP = 32 | Бит поддержки WEBP; не числовой IMAGETYPE_тип. imagetypes |
IMG_BMP = 64 | Бит поддержки BMP; не числовой IMAGETYPE_тип. imagetypes |
IMG_TGA = 128 | Бит поддержки TGA; не числовой IMAGETYPE_тип. imagetypes |
IMG_WEBP_LOSSLESS = 101 | Режим без потерь вместо quality0..100; PHP8.1+. imagewebp |
IMG_COLOR_TILED = -5 | Заполнять область повторяющейся плиткой. imagesettile |
IMG_COLOR_STYLED = -2 | Чередовать цвета/пропуски по текущему стилю линии. imagesetstyle |
IMG_COLOR_BRUSHED = -3 | Рисовать линию отпечатками текущей кисти. imagesetbrush |
IMG_COLOR_STYLEDBRUSHED = -4 | Включать/пропускать кисть по стилю. imagesetbrush |
IMG_COLOR_TRANSPARENT = -6 | Пропустить пиксель стиля; это не альфа-канал произвольного цвета. imagesetstyle |
IMG_ARC_ROUNDED = 0 | Алиас PIE: сектор с дугой. imagefilledarc |
IMG_ARC_PIE = 0 | Сектор с дугой и радиусами; альтернатива CHORD. imagefilledarc |
IMG_ARC_CHORD = 1 | Замкнуть концы дуги хордой. imagefilledarc |
IMG_ARC_NOFILL = 2 | Контур без заливки; допускает OR с EDGED. imagefilledarc |
IMG_ARC_EDGED = 4 | При NOFILL дополнительно провести радиусы к центру. imagefilledarc |
IMG_GD2_RAW = 1 | Несжатые GD2-блоки; исторический внутренний формат. imagegd2 |
IMG_GD2_COMPRESSED = 2 | Сжатые GD2-блоки; исторический внутренний формат. imagegd2 |
IMG_FLIP_HORIZONTAL = 1 | Зеркально слева направо. imageflip |
IMG_FLIP_VERTICAL = 2 | Зеркально сверху вниз. imageflip |
IMG_FLIP_BOTH = 3 | Отразить обе оси. imageflip |
IMG_EFFECT_REPLACE = 0 | Заменять пиксели с alpha напрямую. imagelayereffect |
IMG_EFFECT_ALPHABLEND = 1 | Смешивать цвет с фоном по alpha. imagelayereffect |
IMG_EFFECT_NORMAL = 2 | Обычный режим наложения; отдельное числовое значение, не алиас ALPHABLEND. imagelayereffect |
IMG_EFFECT_OVERLAY = 3 | Режим overlay для наложения. imagelayereffect |
IMG_EFFECT_MULTIPLY = 4 | Умножать компоненты; PHP 8.0+. imagelayereffect |
IMG_CROP_DEFAULT = 0 | Текущее поведение TRANSPARENT; с 7.4 нет fallback к SIDES. imagecropauto |
IMG_CROP_TRANSPARENT = 1 | Убрать прозрачные поля. imagecropauto |
IMG_CROP_BLACK = 2 | Убрать чёрные поля. imagecropauto |
IMG_CROP_WHITE = 3 | Убрать белые поля. imagecropauto |
IMG_CROP_SIDES = 4 | Оценить фон по четырём углам. imagecropauto |
IMG_CROP_THRESHOLD = 5 | Убрать близкое к color с заданным процентным threshold. imagecropauto |
IMG_BELL = 1 | колоколообразное ядро. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_BESSEL = 2 | ядро Bessel. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_BILINEAR_FIXED = 3 | билинейный пересчёт с фиксированной арифметикой. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_BICUBIC = 4 | бикубическая интерполяция. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_BICUBIC_FIXED = 5 | бикубическая с фиксированной арифметикой. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_BLACKMAN = 6 | окно Blackman. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_BOX = 7 | прямоугольное усреднение. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_BSPLINE = 8 | B-spline. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_CATMULLROM = 9 | Catmull–Rom. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_GAUSSIAN = 10 | гауссово ядро. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_GENERALIZED_CUBIC = 11 | обобщённое кубическое. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_HERMITE = 12 | Hermite. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_HAMMING = 13 | окно Hamming. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_HANNING = 14 | окно Hanning. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_MITCHELL = 15 | Mitchell. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_POWER = 17 | степенное ядро. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_QUADRATIC = 18 | квадратичное. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_SINC = 19 | sinc. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_NEAREST_NEIGHBOUR = 16 | ближайший сосед, без смешивания. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_WEIGHTED4 = 21 | четыре взвешенных пикселя; imagescale пока не поддерживает. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_TRIANGLE = 20 | треугольное ядро. Смотрите ограничения конкретной операции; универсального лучшего ядра нет. imagesetinterpolation |
IMG_AFFINE_TRANSLATE = 0 | Перенос; options содержит x, y. imageaffinematrixget |
IMG_AFFINE_SCALE = 1 | Масштаб; options содержит x, y коэффициенты. imageaffinematrixget |
IMG_AFFINE_ROTATE = 2 | Поворот; options — угол в градусах. imageaffinematrixget |
IMG_AFFINE_SHEAR_HORIZONTAL = 3 | Горизонтальный сдвиг формы; options — угол. imageaffinematrixget |
IMG_AFFINE_SHEAR_VERTICAL = 4 | Вертикальный сдвиг формы; options — угол. imageaffinematrixget |
GD_BUNDLED = 1 | 1 — встроенная поставка libgd PHP,0 — внешняя. gd_info |
IMG_FILTER_NEGATE = 0 | Инверсия RGB, без дополнительных args. imagefilter |
IMG_FILTER_GRAYSCALE = 1 | Серый REC.601, без args; alpha сохраняется. imagefilter |
IMG_FILTER_BRIGHTNESS = 2 | Один аргумент яркости −255..255. imagefilter |
IMG_FILTER_CONTRAST = 3 | Один аргумент контраста; положительный уменьшает контраст. imagefilter |
IMG_FILTER_COLORIZE = 4 | red, green, blue, optionalalpha. imagefilter |
IMG_FILTER_EDGEDETECT = 5 | Границы, без args. imagefilter |
IMG_FILTER_GAUSSIAN_BLUR = 7 | Гауссово размытие, без args. imagefilter |
IMG_FILTER_SELECTIVE_BLUR = 8 | Выборочное размытие, без args. imagefilter |
IMG_FILTER_EMBOSS = 6 | Рельеф, без args. imagefilter |
IMG_FILTER_MEAN_REMOVAL = 9 | Подчёркивание деталей, без args. imagefilter |
IMG_FILTER_SMOOTH = 10 | Один параметр степени сглаживания. imagefilter |
IMG_FILTER_PIXELATE = 11 | Размер блока и optionalbool advanced. imagefilter |
IMG_FILTER_SCATTER = 12 | sub, plus, optional массив цветов; PHP7.4+. imagefilter |
GD_VERSION = 2.0.35 | Строка версии GD, с которой собран PHP. gd_info |
GD_MAJOR_VERSION = 2 | Старшая часть номера GD. gd_info |
GD_MINOR_VERSION = 0 | Младшая часть номера GD. gd_info |
GD_RELEASE_VERSION = 35 | Номер выпуска GD. gd_info |
GD_EXTRA_VERSION = | Дополнительная beta/rc-часть версии. gd_info |
PNG_NO_FILTER = 0 | Отключить фильтры PNG. imagepng |
PNG_FILTER_NONE = 8 | Разрешить PNG-строки без предсказания. imagepng |
PNG_FILTER_SUB = 16 | Предсказывать байт по левому соседу. imagepng |
PNG_FILTER_UP = 32 | Предсказывать по предыдущей строке. imagepng |
PNG_FILTER_AVG = 64 | Предсказывать по среднему слева/сверху. imagepng |
PNG_FILTER_PAETH = 128 | Предиктор Paeth по соседним байтам. imagepng |
PNG_ALL_FILTERS = 248 | Разрешить все PNG-фильтры; кодер выбирает подходящий. imagepng |
Набор ниже относится к стандартным функциям размеров/MIME. Это не обещание, что GD декодирует все перечисленные форматы: например PSD/TIFF и PDF требуют других библиотек.
Интерполяция выбирает, какие исходные пиксели влияют на новый. Nearest сохраняет ступеньки pixel-art; bilinear смешивает соседей; кубические/оконные ядра могут лучше сохранять детали или давать ореолы. Сравнивайте один и тот же материал в итоговом размере, не выбирайте ядро только по названию.
Почему порядок масштаба и переноса меняет результат
Пусть точка наклейки находится в (4,2). Мы хотим увеличить рисунок вдвое и сдвинуть его на 5 пикселей вправо, на 3 вниз. Если сначала сдвинуть, а потом увеличить, увеличится и величина сдвига. Поэтому одинаковые операции в разном порядке размещают наклейку по-разному.
| Порядок | Путь одной и той же точки |
|---|---|
| Сначала масштаб, затем перенос | (4,2) → (8,4) → (13,7). Сдвиг 5,3 прибавили к уже увеличенным координатам. |
| Сначала перенос, затем масштаб | (4,2) → (9,5) → (18,10). Вдвое увеличили и исходные координаты, и сдвиг. |
Матрица хранит правило из шести чисел. Для массива $m новая координата x равна $m[0] * $x + $m[2] * $y + $m[4]; новая y — $m[1] * $x + $m[3] * $y + $m[5]. Скобки с числом выбирают элемент массива; звёздочка умножает. Это не пиксели и не PNG: сначала мы проверим правило, затем его можно передать imageaffine.
<?php
declare(strict_types=1);
$scale = imageaffinematrixget(IMG_AFFINE_SCALE, ["x" => 2.0, "y" => 2.0]);
$move = imageaffinematrixget(IMG_AFFINE_TRANSLATE, ["x" => 5.0, "y" => 3.0]);
$first = imageaffinematrixconcat($scale, $move);
$second = imageaffinematrixconcat($move, $scale);
$x = 4;
$y = 2;
echo $first[0] * $x + $first[2] * $y + $first[4], ",", $first[1] * $x + $first[3] * $y + $first[5], "\n";
echo $second[0] * $x + $second[2] * $y + $second[4], ",", $second[1] * $x + $second[3] * $y + $second[5], "\n";
Ожидаемый результат
13,7
18,10
В imageaffinematrixconcat($scale, $move) правило первого аргумента применяется раньше правила второго. Именно поэтому простая перестановка даёт две разные точки. Здесь числа — полезный результат вычисления координат; операция сама ничего не рисует.
Два равномерных масштаба или два переноса — специальные случаи, где перестановка может ничего не показать. Для проверки общего порядка берите операции разных видов и прослеживайте конкретную точку. После выбора порядка передайте матрицу imageaffine и сравните полученную картинку с исходником в практическом примере карточки.
Приём изображений: что проверяет каждый шаг
Файл от посетителя — внешние данные. Расширение .jpg и клиент ский Content-Type не являются доказательством. Обработка формы сначала проверяет метод запроса, поля, авторизацию и CSRF, затем UPLOAD_ERR_OK/is_uploaded_file, лимит байтов, Fileinfo и допустимый формат. Дальше getimagesize ограничивает стороны/пиксели, а выбранный декодер должен успешно получить GdImage. Проверки выполняют разные задачи: один вызов не заменяет остальные.
| Проблема | Действие |
|---|---|
| Маленький файл, огромная картинка | Ограничить width, height, width×height до decode; учесть одновременные копии. Truecolor требует как минимум несколько байт на пиксель плюс структуры/кодеки. |
| Чужое имя/путь | Создать собственное имя из контролируемого идентификатора, писать в выделенный каталог; не соединять непроверенный filename с путём. Временную производную проверить, затем атомарно опубликовать в своём хранилище. |
| Произвольный URL | Отдельный HTTP клиент с allowlist/таймаутами/ограничениями redirect и размера. Прямой URL в imagecreatefrom*может открыть непредусмотренные ресурсы сервера. |
| Повернутое фото | EXIF orientation может требовать rotate и flip, GD не исправляет её автоматически. Метаданные ориентации после коррекции согласуйте с новыми пикселями. |
| Утечка метаданных | Производную генерируйте с осознанной политикой EXIF/IPTC; координаты камеры и авторские поля могут быть лишними. Нужное сохраняйте явно. |
| Повреждённый вход/запись | Обработать warning, false, ValueError/TypeError; не показывать пользователю сырой путь сервера. Проверить получившийся файл, не одно true. |
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(16, 12);
imagepng($image, "upload.bin");
$file = "upload.bin";
$mime = (new finfo(FILEINFO_MIME_TYPE))->file($file);
$size = getimagesize($file);
if (filesize($file) > 100000 || $mime !== "image/png" || $size === false
|| $size[0] < 1 || $size[1] < 1 || $size[0] > 1000 || $size[1] > 1000
|| $size[0] * $size[1] > 500000) {
throw new UnexpectedValueException("Image rejected");
}
$decoded = imagecreatefrompng($file);
if ($decoded === false) { throw new UnexpectedValueException("Decode failed"); }
echo imagesx($decoded), "x", imagesy($decoded), " accepted\n";
Ожидаемый результат
16x12 accepted
Этот пример тестирует локальный файл. Настоящая multipart форма имеет дополнительные upload/доступ/CSRF проверки; эта цепочка называется проверкой изображения, ане полным HTTP обработчиком.
Готовый PNG-ответ и место ob_start
На обычной HTML странице размещают <img src="/badge.php" alt="Статус">. Отдельный badge.php отвечает только байтами картинки: Content-Type: image/png перед данными, затем imagepng. Нельзя печатать отладочный echo или предупреждение в этот же поток. Схема вывода другая, чем обычная страница с HTML.
Скачать PNGПолучено через локальный HTTP-запрос. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(120, 40);
$background = imagecolorallocate($image, 20, 80, 100);
imagefill($image, 0, 0, $background);
$white = imagecolorallocate($image, 255, 255, 255);
imagestring($image, 4, 8, 10, "READY", $white);
header("Content-Type: image/png");
imagepng($image);
exit;
Для этого примера выполнена синтаксическая проверка. Реальный HTTP ответ проверяется в веб-окружении; CLI не проверяет заголовки браузера.
Когда кодек пишет вывод, а API нужна строка для объектного хранилища или письма, буферизация вывода позволяет собрать эти байты. Она не делает картинку безопасной и не должна скрывать ошибки; error_log/display_errors настраивайте отдельно.
Скачать PNG
Скачать исходные байтыИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
ob_start();
$success = imagepng($image);
$pngBytes = ob_get_clean();
echo get_debug_type($success), "\n";
echo bin2hex(substr($pngBytes, 0, 8)), "\n";
Текстовая проверка результата
bool
89504e470d0a1a0a
Функция вернула bool, а PNG лежит в строке из буфера. Сигнатура 8 байт показывает, что были получены именно PNG байты.
Практика: PNG-логотип с мягкой прозрачностью поверх фото
Нужен видимый результат: на фото товара появляется небольшой знак с отступом, а края логотипа не имеют чёрного фона. Создаём два объекта: фон назначения и логотип-источник. Alpha логотипа смешивается с фоном назначения. Для самой прозрачной PNG заготовки запись alpha включаем без blending; для наложения на готовый фон blending назначения включаем.
Скачать PNG
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$photo = imagecreatetruecolor(40, 30);
imagefill($photo, 0, 0, imagecolorallocate($photo, 255, 255, 255));
$stamp = imagecreatetruecolor(8, 6);
imagealphablending($stamp, false);
imagesavealpha($stamp, true);
$red = imagecolorallocatealpha($stamp, 255, 0, 0, 64);
imagefill($stamp, 0, 0, $red);
$margin = 3;
$x = imagesx($photo) - imagesx($stamp) - $margin;
$y = imagesy($photo) - imagesy($stamp) - $margin;
imagealphablending($photo, true);
imagecopy($photo, $stamp, $x, $y, 0, 0, imagesx($stamp), imagesy($stamp));
$pixel = imagecolorsforindex($photo, imagecolorat($photo, $x, $y));
echo $x, ",", $y, "\n";
echo $pixel["red"] === 255 && $pixel["green"] > 0 && $pixel["green"] < 255 ? "red blended with white\n" : "unexpected\n";
Текстовая проверка результата
29,21
red blended with white
Для настоящей фотографии первые объекты получаются из imagecreatefromjpeg/png. Если знак больше фото, заранее выберите уменьшение или отказ; отрицательный отступ не является нужным размещением.
Водяной знак помогает показать источник, не является неудаляемой защитой. Сохраните оригинал без знака; если выход прозрачный, проверьте alpha после повторного декодирования.
Практика: общая прозрачность непрозрачной плашки
Другая задача: заранее созданная непрозрачная плашка должна быть полупрозрачной целиком. Здесь imagecopymerge с процентом 50 подходит яснее. Процент вклада источника не равен alpha каждого пикселя PNG, поэтому этот способ не подменяет предыдущий пример.
Скачать PNG
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$photo = imagecreatetruecolor(20, 12);
imagefill($photo, 0, 0, imagecolorallocate($photo, 255, 255, 255));
$stamp = imagecreatetruecolor(6, 4);
imagefill($stamp, 0, 0, imagecolorallocate($stamp, 0, 0, 255));
imagecopymerge($photo, $stamp, 12, 6, 0, 0, 6, 4, 50);
$pixel = imagecolorsforindex($photo, imagecolorat($photo, 13, 7));
echo $pixel["blue"], "\n";
echo $pixel["red"] > 0 && $pixel["red"] < 255 ? "half blend\n" : "unexpected\n";
Текстовая проверка результата
255
half blend
Плашка рисуется внутри выбранной области; остальное не трогается. Для аккуратных краёв текста с alpha предпочтительнее предыдущий вариант с imagecopy.
Стоимость операций: как не превратить превью в долгий запрос
Главная единица объёма — пиксели, не килобайты JPEG. Холст 6000×4000 содержит 24 миллиона пикселей; один набор truecolor данных занимает около 96 МБ ещё до дополнительных структур, исходных байтов, копий и кодера. Реальный предел зависит от сборки; это оценка, не гарантия memory_limit.
| Дорогая часть | Как организовать |
|---|---|
| Декодирование/несколько производных | Декодируйте исходник один раз для разумного набора размеров, освобождайте промежуточные ссылки. Не увеличивайте лимиты бесконечно; большие пакеты передавайте очереди. |
| Двойной PHP цикл по пикселям | Для фильтра/копирования/масштаба предпочтите встроенную операцию. imagecolorat циклы полезны на учебной маске, но дороги на фото. |
| Повторные перекодирования | Кешируйте производную по ключу исходник+размер+формат+версия обработки. Не сжимайте JPEG повторно много раз: потери накапливаются. |
| AVIF speed и quality | Настраивайте баланс на типичном материале, измеряйте время и размер. Параллельность ограничивайте с учётом CPU и памяти. |
| Качество/цвет | GD не обещает полноценное ICC управление, сохранение анимации и metadata. Требования архива/печати выбирают инструмент, а не наоборот. |
Обсуждения: от повреждённого HTTP-ответа до прозрачности
Обсуждения дали постановки задач. Старые ответы иногда неверны для текущего PHP или формата; здесь используются собственные примеры и контракт PHP.net, а не перенос чужого кода.
| Обсуждение | Что проверяем |
|---|---|
| Stack Overflow: 1705098 | Почему прозрачный PNG получает чёрный фон: blending и сохранение alpha — отдельные настройки. imagesavealpha |
| Stack Overflow: 12181573 | Alpha может потеряться на предыдущем шаге обработки, а не в функции, на которую сначала падает подозрение. Проверяем сохранённую производную. imagecreatefromstring |
| Stack Overflow: 9332497 | GIF не приобретает полный alpha от imagesavealpha; выбор формата является частью решения. imagecolortransparent |
| Stack Overflow: 18410739 | Ограниченная палитра может менять цвета при композиции; для фотографии нужен truecolor. imagecreatetruecolor |
| Stack Overflow: 9836391 | Файл может быть исправен при повреждённом HTTP-ответе. Современный imagepng поддерживает вывод без имени; старый совет о обязательном php://output не принимается как правило. imagepng |
| Stack Overflow: 62102018 | Сравнение localhost/VPS: зависимость от URL локального файла и два последовательных imagepng в одном ответе. imagepng |
| Stack Overflow: 35516499 | Значок повреждённого изображения скрывает диагностический текст: проверять журнал и тело HTTP, не лечить без причины base64-обёрткой. imagepng |
| Stack Overflow: 21851807 | Бинарные байты в HTML CMS и несовпадающий Content-Type: разделить HTML-страницу и изображение с отдельным URL. imagepng |
| Stack Overflow: 26059152 | В обсуждении найден пробел перед открывающим PHP-тегом; проверять отсутствие любых лишних байтов перед PNG. imagepng |
Справочник GD: 117 функций по категориям
Здесь все 117 официальных функций книги GD, включая 3 исторические удалённые, чтобы разбираться в старых проектах. У каждой есть синтаксис, контракт, простые примеры, практическое применение и смежные операции. Два класса и все константы описаны в отдельных разделах.
Учебный маршрут: от значка к обработчику превью
1. Создайте цветной холст и покажите разницу между объектом, пикселем и файлом. 2. Нарисуйте рамку и подпись. 3. Сохраните прозрачный PNG и прочитайте проверочный alpha. 4. Вырежьте аватар и уменьшите, сохранив пропорции. 5. Наложите логотип двумя способами и объясните разницу. 6. Добавьте лимиты входа, политику формата, метаданных и кеша. Наконец подключите загрузку изHTML-формыи отдельную обработкуошибок.
В примерах с FreeType включён настоящий DejaVu Sans с кириллицей и лицензией; на сайте выберите подходящий лицензированный TTF. Примеры Windows capture описывают API без захвата экрана; HTTP-примеры проверены настоящими локальными запросами; ответы PNG и статусы сохранены в evidence/gd-visual-manifest.json. Числовые мини-пробы в карточках дополняют пошаговый практический маршрут и видимые изображения, а не заменяют его.
Функции и методы этой темы
Откройте карточку, чтобы увидеть договор функции, примеры, ограничения и связанные инструменты.
imagecreateСоздать небольшую палитровую схему: пиксели хранят номера цветов, до 256 записей.
PHP 8: GdImage · gd
imagecreate(int $width, int $height): GdImage|falseСоздать небольшую палитровую схему: пиксели хранят номера цветов, до 256 записей.
| Параметры и результат | Как понимать и применять |
|---|---|
| width, height | Положительные целые размеры в пикселях. Начальная координата (0,0), последний пиксель (width−1, height−1). Не принимайте произвольные размеры от посетителя. |
| Возврат / память | GdImage либо false; неверные размеры могут вызвать ValueError. Truecolor изначально чёрный; в палитровом холсте первый выделенный цвет задаёт фон. Удвоение обеих сторон даёт в 4 раза больше пикселей. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreate(8, 6);
imagecolorallocate($image, 245, 245, 245);
echo imagesx($image), "x", imagesy($image), "\n";
echo imageistruecolor($image) ? "truecolor\n" : "palette\n";
Текстовая проверка результата
8x6
palette
Числа описывают пиксели, не сантиметры. Переменная хранит объект, а не PNG-байты.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreate(30, 10);
$color = imagecolorallocate($image, 20, 80, 120);
imagefilledrectangle($image, 0, 0, 29, 9, $color);
imagepng($image, "badge.png");
$info = getimagesize("badge.png");
echo $info[0], "x", $info[1], " ", $info["mime"], "\n";
Текстовая проверка результата
30x10 image/png
Здесь создание, цвет, рисование и кодирование — четыре разных шага; файл появляется только после imagepng.
Связанные операции: imagecreatetruecolor, imagecolorallocate, imagepng.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecreatetruecolorСоздать полноцветный холст для фотографии, превью или наложения логотипа.
PHP 8: GdImage · gd
imagecreatetruecolor(int $width, int $height): GdImage|falseСоздать полноцветный холст для фотографии, превью или наложения логотипа.
| Параметры и результат | Как понимать и применять |
|---|---|
| width, height | Положительные целые размеры в пикселях. Начальная координата (0,0), последний пиксель (width−1, height−1). Не принимайте произвольные размеры от посетителя. |
| Возврат / память | GdImage либо false; неверные размеры могут вызвать ValueError. Truecolor изначально чёрный; в палитровом холсте первый выделенный цвет задаёт фон. Удвоение обеих сторон даёт в 4 раза больше пикселей. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
echo imagesx($image), "x", imagesy($image), "\n";
echo imageistruecolor($image) ? "truecolor\n" : "palette\n";
Текстовая проверка результата
8x6
truecolor
Числа описывают пиксели, не сантиметры. Переменная хранит объект, а не PNG-байты.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(30, 10);
$color = imagecolorallocate($image, 20, 80, 120);
imagefilledrectangle($image, 0, 0, 29, 9, $color);
imagepng($image, "badge.png");
$info = getimagesize("badge.png");
echo $info[0], "x", $info[1], " ", $info["mime"], "\n";
Текстовая проверка результата
30x10 image/png
Здесь создание, цвет, рисование и кодирование — четыре разных шага; файл появляется только после imagepng.
Связанные операции: imagecreate, imagecolorallocate, imagepng.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagesxУзнать ширину уже загруженного изображения: расчёт рамки, пропорций или ограничения превью.
PHP 8: GdImage · gd
imagesx(GdImage $image): intУзнать ширину уже загруженного изображения: расчёт рамки, пропорций или ограничения превью.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| Возврат | Положительное целое число пикселей. Операция читает свойства холста; не требует повторного чтения/разбора файла. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(12, 8);
echo imagesx($image), "\n";
Текстовая проверка результата
12
Последняя координата по этой оси на единицу меньше длины.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(120, 80);
$factor = min(60 / imagesx($image), 60 / imagesy($image), 1);
echo (int) round(imagesx($image) * $factor), "x", (int) round(imagesy($image) * $factor), "\n";
Текстовая проверка результата
60x40
min с единицей запрещает увеличение маленьких картинок. Округление нужно перед целочисленными аргументами GD.
Связанные операции: imagesx, imagesy, getimagesize, imagescale.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagesyУзнать высоту уже загруженного изображения: расчёт рамки, пропорций или ограничения превью.
PHP 8: GdImage · gd
imagesy(GdImage $image): intУзнать высоту уже загруженного изображения: расчёт рамки, пропорций или ограничения превью.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| Возврат | Положительное целое число пикселей. Операция читает свойства холста; не требует повторного чтения/разбора файла. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(12, 8);
echo imagesy($image), "\n";
Текстовая проверка результата
8
Последняя координата по этой оси на единицу меньше длины.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(120, 80);
$factor = min(60 / imagesx($image), 60 / imagesy($image), 1);
echo (int) round(imagesx($image) * $factor), "x", (int) round(imagesy($image) * $factor), "\n";
Текстовая проверка результата
60x40
min с единицей запрещает увеличение маленьких картинок. Округление нужно перед целочисленными аргументами GD.
Связанные операции: imagesx, imagesy, getimagesize, imagescale.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imageistruecolorВыбрать подходящий путь: сохранить полноцветную фотографию или осознанно работать с палитрой.
PHP 8: GdImage · gd
imageistruecolor(GdImage $image): boolВыбрать подходящий путь: сохранить полноцветную фотографию или осознанно работать с палитрой.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| Возврат | true — truecolor, false — палитра. Это формат внутреннего холста, а не расширение исходного файла: PNG бывает обоих видов. |
<?php
declare(strict_types=1);
$palette = imagecreate(2, 2);
$photo = imagecreatetruecolor(2, 2);
var_dump(imageistruecolor($palette), imageistruecolor($photo));
Ожидаемый результат
bool(false)
bool(true)
Проверка не конвертирует изображение.
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
imagecolorallocate($image, 10, 20, 30);
if (!imageistruecolor($image)) {
imagepalettetotruecolor($image);
}
var_dump(imageistruecolor($image));
Ожидаемый результат
bool(true)
Конвертируется тот же объект. Это не добавляет деталей, потерянных при палитровом сжатии.
Связанные операции: imagepalettetotruecolor, imagetruecolortopalette.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagedestroyПонять старые примеры освобождения ресурсов и корректно обновить их для PHP 8.
Deprecated PHP 8.5 · gd
imagedestroy(GdImage $image): trueПонять старые примеры освобождения ресурсов и корректно обновить их для PHP 8.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| Возврат / версии | До PHP 8 закрывала gd-resource. С PHP 8 ничего не освобождает и возвращает true. С PHP 8.5 deprecated. В новом коде удаляйте ненужные ссылки; объект освобождается, когда ссылок не остаётся. |
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$copy = $image;
unset($image);
echo imagesx($copy), "\n";
unset($copy);
echo "references released\n";
Ожидаемый результат
8
references released
Первый unset не уничтожает объект, пока copy указывает на него. Это особенно важно при пакетной обработке.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
set_error_handler(static function (int $severity, string $message): bool {
if ($severity === E_DEPRECATED) { echo "deprecated\n"; return true; }
return false;
});
try { var_dump(imagedestroy($image)); } finally { restore_error_handler(); }
echo imagesx($image), "\n";
Ожидаемый результат
deprecated
bool(true)
8
Этот пример намеренно демонстрирует миграцию в PHP 8.5, не предлагает подавлять deprecated в приложении.
Связанные операции: imagecreatetruecolor.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
gd_infoПеред генерацией превью узнать, какие кодеки и шрифтовые возможности действительно собраны на сервере.
PHP 8: GdImage · gd
gd_info(): arrayПеред генерацией превью узнать, какие кодеки и шрифтовые возможности действительно собраны на сервере.
| Параметры и результат | Как понимать и применять |
|---|---|
| Параметры | Нет. GD должно быть загружено. Проверка extension_loaded("gd") предшествует вызову в диагностике развёртывания. |
| Возврат | Ассоциативный массив: GD Version; FreeType Support/FreeType Linkage; чтение и запись GIF; JPEG, PNG, WBMP, XPM, XBM, WebP, BMP, AVIF, TGA; JIS-mapped Japanese Font Support. Набор ключей зависит от версии и сборки. |
<?php
declare(strict_types=1);
$info = gd_info();
echo ($info["PNG Support"] ?? false) ? "PNG available\n" : "PNG unavailable\n";
Ожидаемый результат
PNG available
Это проверка текущей учебной сборки; на другом сервере ответ может отличаться.
<?php
declare(strict_types=1);
$info = gd_info();
$formats = [];
foreach (["PNG Support" => "png", "JPEG Support" => "jpg"] as $key => $extension) {
if ($info[$key] ?? false) { $formats[] = $extension; }
}
echo implode(",", $formats), "\n";
Ожидаемый результат
png,jpg
Поддержка библиотеки — необходимое условие, но не гарантия записи файла в конкретный каталог.
Связанные операции: imagetypes.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagetypesПроверить формат через битовую маску, например разрешить WebP только при наличии его поддержки.
PHP 8: GdImage · gd
imagetypes(): intПроверить формат через битовую маску, например разрешить WebP только при наличии его поддержки.
| Параметры и результат | Как понимать и применять |
|---|---|
| Параметры / результат | Нет аргументов. int — битовое OR поддерживаемых типов IMG_GIF, IMG_JPG/IMG_JPEG, IMG_PNG, IMG_WBMP, IMG_XPM, IMG_WEBP, IMG_BMP, IMG_AVIF. Это IMG_*, не IMAGETYPE_* из getimagesize. |
| Проверка | ($types & IMG_PNG) !== 0 проверяет отдельный бит; сравнение всей маски с IMG_PNG ошибочно, если поддерживаются и другие типы. |
<?php
declare(strict_types=1);
var_dump((imagetypes() & IMG_PNG) !== 0);
Ожидаемый результат
bool(true)
Битовая операция отвечает на вопрос о возможности конкретного формата.
<?php
declare(strict_types=1);
$format = (imagetypes() & IMG_JPG) !== 0 ? "jpeg" : "png";
echo $format, "\n";
Ожидаемый результат
jpeg
Здесь выбор по поддержке; прозрачному исходнику дополнительно нужна политика фона.
Связанные операции: gd_info.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imageinterlaceСохранить прогрессивный JPEG, который во время загрузки сначала показывает грубое изображение, затем детали.
PHP 8: GdImage · gd
imageinterlace(GdImage $image, ?bool $enable = null): boolСохранить прогрессивный JPEG, который во время загрузки сначала показывает грубое изображение, затем детали.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| enable | true включает, false отключает, null/пропуск только читает состояние. Для JPEG это progressive, для поддерживающих interlace форматов — чересстрочность. |
| Возврат | Текущее состояние bool, а не общий флаг успеха; false может означать нормальное отключённое состояние. С 8.0.5 bool вместо исторического int. |
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
var_dump(imageinterlace($image));
var_dump(imageinterlace($image, true));
var_dump(imageinterlace($image, false));
Ожидаемый результат
bool(false)
bool(true)
bool(false)
Это настройка кодирования; пиксели не переставляются.
Скачать JPGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(20, 10);
imageinterlace($image, true);
imagejpeg($image, "preview.jpg", 85);
$bytes = file_get_contents("preview.jpg");
var_dump(str_contains($bytes, hex2bin("ffc2")));
Текстовая проверка результата
bool(true)
Маркер SOF2 подтверждает прогрессивный JPEG учебного кодека. Размер файла и качество сравнивают на настоящем фото.
Связанные операции: imagejpeg, imagepng.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imageresolutionЗаписать DPI для печатного макета, не путая его с количеством пикселей.
PHP 8: GdImage · gd
imageresolution(GdImage $image, ?int $resolution_x = null, ?int $resolution_y = null): array|trueЗаписать DPI для печатного макета, не путая его с количеством пикселей.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| resolution_x, resolution_y | null/null читает [x, y]. Только x задаёт обе оси; x и y задают их отдельно. Для нового холста обычно 96 DPI. Метаданные поддерживаются PNG/JPEG; DPI не изменяет размеры и рисование. |
| Возврат | Чтение array из двух int; установка true. Для реального изменения размеров нужны imagescale/imagecopyresampled. |
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(20, 10);
imageresolution($image, 300);
echo implode("x", imageresolution($image)), " DPI\n";
echo imagesx($image), "x", imagesy($image), " pixels\n";
Ожидаемый результат
300x300 DPI
20x10 pixels
Тот же холст станет физически меньше при печати с большим DPI; новых пикселей не появилось.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
imageresolution($image, 150, 300);
echo implode(",", imageresolution($image)), "\n";
Ожидаемый результат
150,300
Не делайте неравные DPI без требования устройства или печатного процесса.
Связанные операции: imagescale, imagesx, imagesy.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecolorallocateПодготовить цвет перед рисованием фона, линии или текста.
PHP 8: GdImage · gd
imagecolorallocate(GdImage $image, int $red, int $green, int $blue): int|falseПодготовить цвет перед рисованием фона, линии или текста.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| red, green, blue | Компоненты RGB: целые 0–255 (0x00–0xFF). 0 — нет компонента, 255 — максимальная интенсивность. Цвет берётся в контексте конкретного холста. |
| Возврат | int идентификатор/упакованный цвет либо false, если палитра заполнена. 0 — допустимый первый индекс и чёрный truecolor; проверяйте === false. В палитре выделение добавляет запись, но ещё не красит произвольные пиксели. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$color = imagecolorallocate($image, 20, 80, 120);
var_dump($color === false);
$parts = imagecolorsforindex($image, $color);
echo $parts["red"], ",", $parts["green"], ",", $parts["blue"], ",", $parts["alpha"], "\n";
Текстовая проверка результата
bool(false)
20,80,120,0
Идентификатор не строка CSS вида #145078. Передаём именно его GD-функции рисования.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(2, 2);
imagealphablending($image, false);
$color = imagecolorallocate($image, 20, 80, 120);
imagesetpixel($image, 1, 1, $color);
$pixel = imagecolorsforindex($image, imagecolorat($image, 1, 1));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
20,80,120
В truecolor с выключенным blending сохраняется исходный цвет и alpha; иначе GD смешивает его с фоном.
Связанные операции: imagecolorsforindex, imagecolorresolve, imagesetpixel.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecolorallocatealphaПодготовить полупрозрачный цвет для значка или водяного знака.
PHP 8: GdImage · gd
imagecolorallocatealpha(GdImage $image, int $red, int $green, int $blue, int $alpha): int|falseПодготовить полупрозрачный цвет для значка или водяного знака.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| red, green, blue | Компоненты RGB: целые 0–255 (0x00–0xFF). 0 — нет компонента, 255 — максимальная интенсивность. Цвет берётся в контексте конкретного холста. |
| alpha | Целое 0–127: 0 полностью непрозрачно, 127 полностью прозрачно. Это шкала GD, не CSS opacity; промежуточный alpha требует подходящего формата и режима blending/savealpha. |
| Возврат | int идентификатор/упакованный цвет либо false, если палитра заполнена. 0 — допустимый первый индекс и чёрный truecolor; проверяйте === false. В палитре выделение добавляет запись, но ещё не красит произвольные пиксели. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$color = imagecolorallocatealpha($image, 20, 80, 120, 64);
var_dump($color === false);
$parts = imagecolorsforindex($image, $color);
echo $parts["red"], ",", $parts["green"], ",", $parts["blue"], ",", $parts["alpha"], "\n";
Текстовая проверка результата
bool(false)
20,80,120,64
Идентификатор не строка CSS вида #145078. Передаём именно его GD-функции рисования.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(2, 2);
imagealphablending($image, false);
$color = imagecolorallocatealpha($image, 20, 80, 120, 64);
imagesetpixel($image, 1, 1, $color);
$pixel = imagecolorsforindex($image, imagecolorat($image, 1, 1));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
20,80,120
В truecolor с выключенным blending сохраняется исходный цвет и alpha; иначе GD смешивает его с фоном.
Связанные операции: imagecolorsforindex, imagecolorresolvealpha, imagesetpixel.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecolorexactПодобрать цвет для ограниченной палитры, например значка GIF или схемы с фиксированными цветами.
PHP 8: GdImage · gd
imagecolorexact(GdImage $image, int $red, int $green, int $blue): intПодобрать цвет для ограниченной палитры, например значка GIF или схемы с фиксированными цветами.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| red, green, blue | Компоненты RGB: целые 0–255 (0x00–0xFF). 0 — нет компонента, 255 — максимальная интенсивность. Цвет берётся в контексте конкретного холста. |
| Алгоритм и результат | Ищет точное совпадение; возвращает индекс либо −1, если его нет. Не выделяет новый цвет. |
| Граница применения | Близость цвета не означает совпадение фирменного цвета. Для фото предпочитайте truecolor; не выполняйте повторный поиск палитры для каждого пикселя большого фото в PHP. |
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$red = imagecolorallocate($image, 255, 0, 0);
$blue = imagecolorallocate($image, 0, 0, 255);
$index = imagecolorexact($image, 255, 0, 0);
echo $index, "\n";
Ожидаемый результат
0
Первый выделенный цвет имеет индекс 0, поэтому if (!$index) ошибочно объявит неудачу.
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$red = imagecolorallocate($image, 255, 0, 0);
$blue = imagecolorallocate($image, 0, 0, 255);
$index = imagecolorexact($image, 250, 0, 0);
echo $index === -1 ? "not in palette\n" : "found\n";
Ожидаемый результат
not in palette
Так различаются проверка существования, поиск приближения и выделение нового цвета. Выбор функции зависит от допустимости изменения палитры.
Связанные операции: imagecolorexact, imagecolorclosest, imagecolorresolve.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecolorexactalphaПодобрать цвет для ограниченной палитры, например значка GIF или схемы с фиксированными цветами.
PHP 8: GdImage · gd
imagecolorexactalpha(GdImage $image, int $red, int $green, int $blue, int $alpha): intПодобрать цвет для ограниченной палитры, например значка GIF или схемы с фиксированными цветами.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| red, green, blue | Компоненты RGB: целые 0–255 (0x00–0xFF). 0 — нет компонента, 255 — максимальная интенсивность. Цвет берётся в контексте конкретного холста. |
| alpha | Целое 0–127: 0 полностью непрозрачно, 127 полностью прозрачно. Это шкала GD, не CSS opacity; промежуточный alpha требует подходящего формата и режима blending/savealpha. |
| Алгоритм и результат | Ищет точное совпадение; возвращает индекс либо −1, если его нет. Не выделяет новый цвет. |
| Граница применения | Близость цвета не означает совпадение фирменного цвета. Для фото предпочитайте truecolor; не выполняйте повторный поиск палитры для каждого пикселя большого фото в PHP. |
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$red = imagecolorallocate($image, 255, 0, 0);
$blue = imagecolorallocate($image, 0, 0, 255);
$index = imagecolorexactalpha($image, 255, 0, 0, 0);
echo $index, "\n";
Ожидаемый результат
0
Первый выделенный цвет имеет индекс 0, поэтому if (!$index) ошибочно объявит неудачу.
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$red = imagecolorallocate($image, 255, 0, 0);
$blue = imagecolorallocate($image, 0, 0, 255);
$index = imagecolorexactalpha($image, 250, 0, 0, 0);
echo $index === -1 ? "not in palette\n" : "found\n";
Ожидаемый результат
not in palette
Так различаются проверка существования, поиск приближения и выделение нового цвета. Выбор функции зависит от допустимости изменения палитры.
Связанные операции: imagecolorexact, imagecolorclosest, imagecolorresolve.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecolorclosestПодобрать цвет для ограниченной палитры, например значка GIF или схемы с фиксированными цветами.
PHP 8: GdImage · gd
imagecolorclosest(GdImage $image, int $red, int $green, int $blue): intПодобрать цвет для ограниченной палитры, например значка GIF или схемы с фиксированными цветами.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| red, green, blue | Компоненты RGB: целые 0–255 (0x00–0xFF). 0 — нет компонента, 255 — максимальная интенсивность. Цвет берётся в контексте конкретного холста. |
| Алгоритм и результат | Возвращает индекс ближайшего цвета, а при пустой палитре −1. Ищет по расстоянию RGB. |
| Граница применения | Близость цвета не означает совпадение фирменного цвета. Для фото предпочитайте truecolor; не выполняйте повторный поиск палитры для каждого пикселя большого фото в PHP. |
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$red = imagecolorallocate($image, 255, 0, 0);
$blue = imagecolorallocate($image, 0, 0, 255);
$index = imagecolorclosest($image, 255, 0, 0);
echo $index, "\n";
Ожидаемый результат
0
Первый выделенный цвет имеет индекс 0, поэтому if (!$index) ошибочно объявит неудачу.
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$red = imagecolorallocate($image, 255, 0, 0);
$blue = imagecolorallocate($image, 0, 0, 255);
$index = imagecolorclosest($image, 250, 0, 0);
echo $index === $red ? "red chosen\n" : "other\n";
Ожидаемый результат
red chosen
Так различаются проверка существования, поиск приближения и выделение нового цвета. Выбор функции зависит от допустимости изменения палитры.
Связанные операции: imagecolorexact, imagecolorclosest, imagecolorresolve.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecolorclosestalphaПодобрать цвет для ограниченной палитры, например значка GIF или схемы с фиксированными цветами.
PHP 8: GdImage · gd
imagecolorclosestalpha(GdImage $image, int $red, int $green, int $blue, int $alpha): intПодобрать цвет для ограниченной палитры, например значка GIF или схемы с фиксированными цветами.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| red, green, blue | Компоненты RGB: целые 0–255 (0x00–0xFF). 0 — нет компонента, 255 — максимальная интенсивность. Цвет берётся в контексте конкретного холста. |
| alpha | Целое 0–127: 0 полностью непрозрачно, 127 полностью прозрачно. Это шкала GD, не CSS opacity; промежуточный alpha требует подходящего формата и режима blending/savealpha. |
| Алгоритм и результат | Возвращает индекс ближайшего цвета, а при пустой палитре −1. Ищет по расстоянию RGB с учётом alpha. |
| Граница применения | Близость цвета не означает совпадение фирменного цвета. Для фото предпочитайте truecolor; не выполняйте повторный поиск палитры для каждого пикселя большого фото в PHP. |
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$red = imagecolorallocate($image, 255, 0, 0);
$blue = imagecolorallocate($image, 0, 0, 255);
$index = imagecolorclosestalpha($image, 255, 0, 0, 0);
echo $index, "\n";
Ожидаемый результат
0
Первый выделенный цвет имеет индекс 0, поэтому if (!$index) ошибочно объявит неудачу.
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$red = imagecolorallocate($image, 255, 0, 0);
$blue = imagecolorallocate($image, 0, 0, 255);
$index = imagecolorclosestalpha($image, 250, 0, 0, 0);
echo $index === $red ? "red chosen\n" : "other\n";
Ожидаемый результат
red chosen
Так различаются проверка существования, поиск приближения и выделение нового цвета. Выбор функции зависит от допустимости изменения палитры.
Связанные операции: imagecolorexact, imagecolorclosest, imagecolorresolve.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecolorclosesthwbПодобрать цвет для ограниченной палитры, например значка GIF или схемы с фиксированными цветами.
PHP 8: GdImage · gd
imagecolorclosesthwb(GdImage $image, int $red, int $green, int $blue): intПодобрать цвет для ограниченной палитры, например значка GIF или схемы с фиксированными цветами.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| red, green, blue | Компоненты RGB: целые 0–255 (0x00–0xFF). 0 — нет компонента, 255 — максимальная интенсивность. Цвет берётся в контексте конкретного холста. |
| Алгоритм и результат | Возвращает индекс ближайшего цвета (при пустой палитре −1) по hue/whiteness/blackness: оттенку, белизне и черноте. Не сводите результат к простому расстоянию RGB. |
| Граница применения | Близость цвета не означает совпадение фирменного цвета. Для фото предпочитайте truecolor; не выполняйте повторный поиск палитры для каждого пикселя большого фото в PHP. |
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$red = imagecolorallocate($image, 255, 0, 0);
$blue = imagecolorallocate($image, 0, 0, 255);
$index = imagecolorclosesthwb($image, 255, 0, 0);
echo $index, "\n";
Ожидаемый результат
0
Первый выделенный цвет имеет индекс 0, поэтому if (!$index) ошибочно объявит неудачу.
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$red = imagecolorallocate($image, 255, 0, 0);
$blue = imagecolorallocate($image, 0, 0, 255);
$index = imagecolorclosesthwb($image, 250, 0, 0);
echo $index === $red ? "red chosen\n" : "other\n";
Ожидаемый результат
red chosen
Так различаются проверка существования, поиск приближения и выделение нового цвета. Выбор функции зависит от допустимости изменения палитры.
Связанные операции: imagecolorexact, imagecolorclosest, imagecolorresolve.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecolorresolveПодобрать цвет для ограниченной палитры, например значка GIF или схемы с фиксированными цветами.
PHP 8: GdImage · gd
imagecolorresolve(GdImage $image, int $red, int $green, int $blue): intПодобрать цвет для ограниченной палитры, например значка GIF или схемы с фиксированными цветами.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| red, green, blue | Компоненты RGB: целые 0–255 (0x00–0xFF). 0 — нет компонента, 255 — максимальная интенсивность. Цвет берётся в контексте конкретного холста. |
| Алгоритм и результат | Сначала точное совпадение, затем выделение новой записи, а при заполненной палитре ближайшая доступная. Возвращает int, а не false. |
| Граница применения | Близость цвета не означает совпадение фирменного цвета. Для фото предпочитайте truecolor; не выполняйте повторный поиск палитры для каждого пикселя большого фото в PHP. |
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$red = imagecolorallocate($image, 255, 0, 0);
$blue = imagecolorallocate($image, 0, 0, 255);
$index = imagecolorresolve($image, 255, 0, 0);
echo $index, "\n";
Ожидаемый результат
0
Первый выделенный цвет имеет индекс 0, поэтому if (!$index) ошибочно объявит неудачу.
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$red = imagecolorallocate($image, 255, 0, 0);
$blue = imagecolorallocate($image, 0, 0, 255);
$index = imagecolorresolve($image, 250, 0, 0);
echo imagecolorstotal($image), "\n";
echo imagecolorsforindex($image, $index)["red"], "\n";
Ожидаемый результат
3
250
Так различаются проверка существования, поиск приближения и выделение нового цвета. Выбор функции зависит от допустимости изменения палитры.
Связанные операции: imagecolorexact, imagecolorclosest, imagecolorresolve.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecolorresolvealphaПодобрать цвет для ограниченной палитры, например значка GIF или схемы с фиксированными цветами.
PHP 8: GdImage · gd
imagecolorresolvealpha(GdImage $image, int $red, int $green, int $blue, int $alpha): intПодобрать цвет для ограниченной палитры, например значка GIF или схемы с фиксированными цветами.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| red, green, blue | Компоненты RGB: целые 0–255 (0x00–0xFF). 0 — нет компонента, 255 — максимальная интенсивность. Цвет берётся в контексте конкретного холста. |
| alpha | Целое 0–127: 0 полностью непрозрачно, 127 полностью прозрачно. Это шкала GD, не CSS opacity; промежуточный alpha требует подходящего формата и режима blending/savealpha. |
| Алгоритм и результат | Сначала точное совпадение, затем выделение новой записи, а при заполненной палитре ближайшая доступная. Возвращает int, а не false. |
| Граница применения | Близость цвета не означает совпадение фирменного цвета. Для фото предпочитайте truecolor; не выполняйте повторный поиск палитры для каждого пикселя большого фото в PHP. |
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$red = imagecolorallocate($image, 255, 0, 0);
$blue = imagecolorallocate($image, 0, 0, 255);
$index = imagecolorresolvealpha($image, 255, 0, 0, 0);
echo $index, "\n";
Ожидаемый результат
0
Первый выделенный цвет имеет индекс 0, поэтому if (!$index) ошибочно объявит неудачу.
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$red = imagecolorallocate($image, 255, 0, 0);
$blue = imagecolorallocate($image, 0, 0, 255);
$index = imagecolorresolvealpha($image, 250, 0, 0, 0);
echo imagecolorstotal($image), "\n";
echo imagecolorsforindex($image, $index)["red"], "\n";
Ожидаемый результат
3
250
Так различаются проверка существования, поиск приближения и выделение нового цвета. Выбор функции зависит от допустимости изменения палитры.
Связанные операции: imagecolorexact, imagecolorclosest, imagecolorresolve.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecolorsforindexПосмотреть компоненты пикселя, чтобы проверить фон, прозрачность или результат фильтра.
PHP 8: GdImage · gd
imagecolorsforindex(GdImage $image, int $color): arrayПосмотреть компоненты пикселя, чтобы проверить фон, прозрачность или результат фильтра.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| color | Индекс палитры либо packed-color truecolor, обычно из imagecolorat или imagecolorallocate. Число принадлежит модели конкретного изображения. |
| Возврат / ошибки | Массив red, green, blue (0–255), alpha (0–127). Недопустимый индекс палитры вызывает ValueError; не трактуйте индекс как RGB напрямую. |
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$color = imagecolorallocatealpha($image, 10, 20, 30, 64);
echo json_encode(imagecolorsforindex($image, $color)), "\n";
Ожидаемый результат
{"red":10,"green":20,"blue":30,"alpha":64}
Надёжнее именованных компонентов нет: битовый разбор палитрового индекса даёт неверный цвет.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$red = imagecolorallocate($image, 255, 0, 0);
imagesetpixel($image, 2, 1, $red);
$pixel = imagecolorsforindex($image, imagecolorat($image, 2, 1));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Проверяется эффект операции, а не только её true.
Связанные операции: imagecolorat, imagecolorallocatealpha.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecoloratПрочитать один пиксель: выбор цвета пипеткой, проверка рамки, анализ маленькой схемы.
PHP 8: GdImage · gd
imagecolorat(GdImage $image, int $x, int $y): int|falseПрочитать один пиксель: выбор цвета пипеткой, проверка рамки, анализ маленькой схемы.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| x, y | Целые координаты внутри холста. x растёт вправо, y вниз; отрицательные и выходящие за width−1/height−1 недопустимы. |
| Возврат | int: индекс палитры либо упакованный ARGB truecolor; false при отказе, вне границ также предупреждение. Для компонентов используйте imagecolorsforindex. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
echo imagecolorat($image, 0, 0), "\n";
Текстовая проверка результата
0
Нулевой цвет не равен ошибке false.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(3, 2);
$red = imagecolorallocate($image, 255, 0, 0);
imagesetpixel($image, 1, 0, $red);
$count = 0;
for ($y = 0; $y < imagesy($image); $y++) {
for ($x = 0; $x < imagesx($image); $x++) {
if (imagecolorat($image, $x, $y) === $red) { $count++; }
}
}
echo $count, "\n";
Текстовая проверка результата
1
Такой двойной PHP-цикл стоит O(width×height) вызовов; для преобразования фото используйте встроенные GD-операции.
Связанные операции: imagecolorsforindex, imagesetpixel.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecolorstotalУзнать, сколько записей занято в палитре, перед добавлением новых цветов.
PHP 8: GdImage · gd
imagecolorstotal(GdImage $image): intУзнать, сколько записей занято в палитре, перед добавлением новых цветов.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| Возврат | int количества цветов палитры; для truecolor возвращается 0. Это не число уникальных видимых цветов и не оценка размера файла. |
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
imagecolorallocate($image, 255, 0, 0);
imagecolorallocate($image, 0, 0, 255);
echo imagecolorstotal($image), "\n";
Ожидаемый результат
2
Цвет может быть выделен, даже если ещё не используется пикселями.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
echo imagecolorstotal($image), "\n";
echo imageistruecolor($image) ? "full color\n" : "palette\n";
Ожидаемый результат
0
full color
Сначала определите модель изображения; нулевой счётчик не означает отсутствие пикселей.
Связанные операции: imageistruecolor, imagetruecolortopalette.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecolorsetПерекрасить сразу все пиксели одного индекса палитры, например статус на схеме.
PHP 8: GdImage · gd
imagecolorset(GdImage $image, int $color, int $red, int $green, int $blue, int $alpha = 0): ?falseПерекрасить сразу все пиксели одного индекса палитры, например статус на схеме.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| color | Существующий индекс палитры. Меняется запись, а не конкретная координата. |
| red, green, blue | Компоненты RGB: целые 0–255 (0x00–0xFF). 0 — нет компонента, 255 — максимальная интенсивность. Цвет берётся в контексте конкретного холста. |
| alpha | Целое 0–127: 0 полностью непрозрачно, 127 полностью прозрачно. Это шкала GD, не CSS opacity; промежуточный alpha требует подходящего формата и режима blending/savealpha. |
| Возврат | null при успехе, false при недопустимом индексе. Не проверяйте успех через if (imagecolorset(...)); null ложноподобен. |
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$index = imagecolorallocate($image, 255, 0, 0);
var_dump(imagecolorset($image, $index, 0, 255, 0));
$pixel = imagecolorsforindex($image, imagecolorat($image, 0, 0));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
NULL
0,255,0
Все пиксели исходного фона ссылались на первый индекс и стали зелёными.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$index = imagecolorallocate($image, 255, 0, 0);
imagecolorset($image, $index, 255, 0, 0, 64);
echo imagecolorsforindex($image, $index)["alpha"], "\n";
Текстовая проверка результата
64
Хранение значения в палитре и сохранение его конкретным форматом — разные вопросы.
Связанные операции: imagecolorallocate, imagecolortransparent.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecolordeallocateОсвободить больше не используемую запись палитры при построении ограниченного набора цветов.
PHP 8: GdImage · gd
imagecolordeallocate(GdImage $image, int $color): trueОсвободить больше не используемую запись палитры при построении ограниченного набора цветов.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| color | Индекс, выделенный в этой палитре. Пиксели, которые ещё ссылаются на него, автоматически не заменяются; дальнейшее переиспользование может поменять их вид. |
| Возврат | bool успеха. Для truecolor отдельной палитры нет; практический смысл функция имеет с imagecreate. |
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
imagecolorallocate($image, 0, 0, 0);
$unused = imagecolorallocate($image, 255, 0, 0);
imagecolordeallocate($image, $unused);
$new = imagecolorallocate($image, 0, 255, 0);
var_dump($new === $unused);
Ожидаемый результат
bool(true)
Освобождена не картинка, а запись цвета.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$base = imagecolorallocate($image, 0, 0, 0);
$old = imagecolorallocate($image, 255, 0, 0);
imagesetpixel($image, 1, 1, $old);
imagesetpixel($image, 1, 1, $base);
var_dump(imagecolordeallocate($image, $old));
Текстовая проверка результата
bool(true)
В большой картинке замена каждого пикселя PHP-циклом дорога; проектируйте палитру заранее.
Связанные операции: imagecolorset, imagecolorresolve.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecolortransparentНазначить один цвет прозрачным, например фон простого GIF-значка.
PHP 8: GdImage · gd
imagecolortransparent(GdImage $image, ?int $color = null): intНазначить один цвет прозрачным, например фон простого GIF-значка.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| color | int идентификатор либо null для чтения. Новая установка заменяет предыдущий прозрачный цвет. Это один цвет целиком, не произвольный alpha каждого пикселя. |
| Возврат | Новый/текущий прозрачный индекс; −1, если прозрачный цвет не задан. Truecolor тоже допускается, но для полноценных полупрозрачных PNG используйте alpha. |
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$background = imagecolorallocate($image, 255, 0, 255);
echo imagecolortransparent($image), "\n";
imagecolortransparent($image, $background);
echo imagecolortransparent($image), "\n";
Текстовая проверка результата
-1
0
Фон исчезнет весь, поэтому такой же цвет внутри рисунка тоже станет прозрачным.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreate(2, 2);
$bg = imagecolorallocate($image, 255, 0, 255);
imagecolortransparent($image, $bg);
imagegif($image, "icon.gif");
$loaded = imagecreatefromgif("icon.gif");
var_dump(imagecolortransparent($loaded) >= 0);
Текстовая проверка результата
bool(true)
GIF поддерживает один прозрачный индекс, но не мягкую прозрачную тень.
Связанные операции: imagecolorallocatealpha, imagesavealpha, imagegif.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagealphablendingУправлять тем, как прозрачная наклейка смешивается с фоном.
PHP 8: GdImage · gd
imagealphablending(GdImage $image, bool $enable): trueУправлять тем, как прозрачная наклейка смешивается с фоном.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| enable | true смешивает новые пиксели с фоном (default true для truecolor), false записывает их цвет и alpha напрямую. Палитровый blending не поддерживается. При смешивании результирующий пиксель обычно непрозрачен. |
| Возврат | bool успеха. Настройка меняет холст, а не уже записанный файл. Alpha GD 0 непрозрачно, 127 прозрачно. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(2, 2);
imagealphablending($image, false);
imagesavealpha($image, true);
$color = imagecolorallocatealpha($image, 255, 0, 0, 64);
imagesetpixel($image, 0, 0, $color);
echo imagecolorsforindex($image, imagecolorat($image, 0, 0))["alpha"], "\n";
Текстовая проверка результата
64
Полупрозрачность хранится в пикселе; пока смешивание выключено, красный не превращается в тёмный красный.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(2, 2);
imagealphablending($image, false);
imagesavealpha($image, true);
$clear = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $clear);
imagepng($image, "clear.png");
$loaded = imagecreatefrompng("clear.png");
echo imagecolorsforindex($loaded, imagecolorat($loaded, 0, 0))["alpha"], "\n";
Текстовая проверка результата
127
Проверяется результат после кодирования, потому что флаг на исходном холсте ещё не доказывает сохранение alpha.
Связанные операции: imagesavealpha, imagecolorallocatealpha, imagecopy.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagesavealphaУправлять сохранением прозрачного фона после записи файла.
PHP 8: GdImage · gd
imagesavealpha(GdImage $image, bool $enable): trueУправлять сохранением прозрачного фона после записи файла.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| enable | true просит сохранять полный alpha при кодировании; default false. Нужно также выбрать формат PNG/WebP/AVIF и отключить blending, когда записываются прозрачные пиксели. GIF/JPEG не получают полный alpha от этого флага. |
| Возврат | bool успеха. Настройка меняет холст, а не уже записанный файл. Alpha GD 0 непрозрачно, 127 прозрачно. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(2, 2);
imagealphablending($image, false);
imagesavealpha($image, true);
$color = imagecolorallocatealpha($image, 255, 0, 0, 64);
imagesetpixel($image, 0, 0, $color);
echo imagecolorsforindex($image, imagecolorat($image, 0, 0))["alpha"], "\n";
Текстовая проверка результата
64
Полупрозрачность хранится в пикселе; пока смешивание выключено, красный не превращается в тёмный красный.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(2, 2);
imagealphablending($image, false);
imagesavealpha($image, true);
$clear = imagecolorallocatealpha($image, 0, 0, 0, 127);
imagefill($image, 0, 0, $clear);
imagepng($image, "clear.png");
$loaded = imagecreatefrompng("clear.png");
echo imagecolorsforindex($loaded, imagecolorat($loaded, 0, 0))["alpha"], "\n";
Текстовая проверка результата
127
Проверяется результат после кодирования, потому что флаг на исходном холсте ещё не доказывает сохранение alpha.
Связанные операции: imagealphablending, imagecolorallocatealpha, imagecopy.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagelayereffectВыбрать, как следующий цвет сочетается с существующим: обычная прозрачность, замена, overlay или multiply.
PHP 8: GdImage · gd
imagelayereffect(GdImage $image, int $effect): trueВыбрать, как следующий цвет сочетается с существующим: обычная прозрачность, замена, overlay или multiply.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| effect | IMG_EFFECT_REPLACE пишет без смешивания; IMG_EFFECT_ALPHABLEND/IMG_EFFECT_NORMAL — обычное alpha-смешивание; IMG_EFFECT_OVERLAY объединяет цвет как overlay; IMG_EFFECT_MULTIPLY затемняет умножением компонентов (PHP 8.0+). Требуется truecolor. |
| Возврат | bool. Это режим последующих операций, не фильтр, который немедленно меняет всё изображение. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(2, 2);
imagelayereffect($image, IMG_EFFECT_REPLACE);
$color = imagecolorallocatealpha($image, 255, 0, 0, 64);
imagesetpixel($image, 0, 0, $color);
echo imagecolorsforindex($image, imagecolorat($image, 0, 0))["alpha"], "\n";
Текстовая проверка результата
64
Пока ничего не рисуем, картинка не меняется.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(2, 2);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
imagelayereffect($image, IMG_EFFECT_MULTIPLY);
$red = imagecolorallocate($image, 255, 0, 0);
imagesetpixel($image, 0, 0, $red);
$pixel = imagecolorsforindex($image, imagecolorat($image, 0, 0));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Для multiply белый нейтрален. Умножение на чёрный дало бы чёрный.
Связанные операции: imagealphablending, imagefilter.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagepalettetotruecolorПерейти от палитры к полноценному alpha и дальнейшему редактированию.
PHP 8: GdImage · gd
imagepalettetotruecolor(GdImage $image): boolПерейти от палитры к полноценному alpha и дальнейшему редактированию.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| Преобразование | Меняет тот же объект. Возвращает bool; полноцветное изображение уже подходит и остаётся таким. |
Полоса содержит четыре оттенка серого: 20, 90, 165 и 245 по каждой компоненте. Превращение палитры в truecolor меняет способ хранения, поэтому вид полосы должен сохраниться.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreate(32, 8);
$dark = imagecolorallocate($image, 20, 20, 20);
$middle = imagecolorallocate($image, 90, 90, 90);
$light = imagecolorallocate($image, 165, 165, 165);
$white = imagecolorallocate($image, 245, 245, 245);
imagefilledrectangle($image, 0, 0, 7, 7, $dark);
imagefilledrectangle($image, 8, 0, 15, 7, $middle);
imagefilledrectangle($image, 16, 0, 23, 7, $light);
imagefilledrectangle($image, 24, 0, 31, 7, $white);
imagepalettetotruecolor($image);
var_dump(imageistruecolor($image));
Текстовая проверка результата
bool(true)
Количество пикселей осталось 32 × 8. Truecolor позволяет дальше добавлять новые цвета; он не меняет уже существующие пиксели сам по себе.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreate(32, 8);
$dark = imagecolorallocate($image, 20, 20, 20);
$middle = imagecolorallocate($image, 90, 90, 90);
$light = imagecolorallocate($image, 165, 165, 165);
$white = imagecolorallocate($image, 245, 245, 245);
imagefilledrectangle($image, 0, 0, 7, 7, $dark);
imagefilledrectangle($image, 8, 0, 15, 7, $middle);
imagefilledrectangle($image, 16, 0, 23, 7, $light);
imagefilledrectangle($image, 24, 0, 31, 7, $white);
$original = $image;
$variant = imagecreatetruecolor(32, 8);
imagecopy($variant, $original, 0, 0, 0, 0, 32, 8);
imagetruecolortopalette($variant, true, 2);
imagepalettetotruecolor($variant);
echo imagesx($variant), "x", imagesy($variant), "\n";
Текстовая проверка результата
32x8
Теперь dither=true пытается передать промежуточные тона узором из двух доступных цветов. На увеличении видны точки, хотя отдельных оттенков в палитре всего два. Последующая imagepalettetotruecolor не убирает этот узор и не восстанавливает четыре исходных оттенка. $original хранит исходный объект; $variant создан отдельно и получает копию пикселей. Одно присваивание $variant = $original не дало бы независимой копии.
Связанные операции: imagetruecolortopalette, imagepalettecopy.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagetruecolortopaletteПерейти к ограниченной палитре для маленькой схемы или GIF, осознанно потеряв часть цветов.
PHP 8: GdImage · gd
imagetruecolortopalette(GdImage $image, bool $dither, int $num_colors): boolПерейти к ограниченной палитре для маленькой схемы или GIF, осознанно потеряв часть цветов.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| Преобразование | Меняет тот же объект. dither включает рассеивание ошибки цвета; num_colors задаёт желаемое число до 256. Палитра может получить меньше цветов. bool успеха; операция с уже палитровым холстом не является повторным квантованием. |
Полоса содержит четыре оттенка серого: 20, 90, 165 и 245 по каждой компоненте. Попросим оставить лишь два цвета. Теперь соседние оттенки неизбежно сольются; это видимая цена сокращения палитры.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(32, 8);
$dark = imagecolorallocate($image, 20, 20, 20);
$middle = imagecolorallocate($image, 90, 90, 90);
$light = imagecolorallocate($image, 165, 165, 165);
$white = imagecolorallocate($image, 245, 245, 245);
imagefilledrectangle($image, 0, 0, 7, 7, $dark);
imagefilledrectangle($image, 8, 0, 15, 7, $middle);
imagefilledrectangle($image, 16, 0, 23, 7, $light);
imagefilledrectangle($image, 24, 0, 31, 7, $white);
imagetruecolortopalette($image, false, 2);
var_dump(imageistruecolor($image));
Текстовая проверка результата
bool(false)
Количество пикселей осталось 32 × 8. При dither=false четыре ровные полосы превращаются в две группы более близких оттенков. Число 2 ограничивает палитру, но не уменьшает ширину картинки.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(32, 8);
$dark = imagecolorallocate($image, 20, 20, 20);
$middle = imagecolorallocate($image, 90, 90, 90);
$light = imagecolorallocate($image, 165, 165, 165);
$white = imagecolorallocate($image, 245, 245, 245);
imagefilledrectangle($image, 0, 0, 7, 7, $dark);
imagefilledrectangle($image, 8, 0, 15, 7, $middle);
imagefilledrectangle($image, 16, 0, 23, 7, $light);
imagefilledrectangle($image, 24, 0, 31, 7, $white);
$original = $image;
$variant = imagecreatetruecolor(32, 8);
imagecopy($variant, $original, 0, 0, 0, 0, 32, 8);
imagetruecolortopalette($variant, true, 2);
echo imagesx($variant), "x", imagesy($variant), "\n";
Текстовая проверка результата
32x8
Теперь dither=true пытается передать промежуточные тона узором из двух доступных цветов. На увеличении видны точки, хотя отдельных оттенков в палитре всего два. Сравните ровные участки предыдущего примера и узор здесь. Для маленькой пиксельной схемы узор может мешать; для некоторых градиентов он смягчает полосы. $original хранит исходный объект; $variant создан отдельно и получает копию пикселей. Одно присваивание $variant = $original не дало бы независимой копии.
Связанные операции: imagepalettetotruecolor, imagepalettecopy.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagepalettecopyСогласовать палитры двух схем перед операциями, в которых важны те же индексы цветов.
PHP 8: GdImage · gd
imagepalettecopy(GdImage $dst, GdImage $src): voidСогласовать палитры двух схем перед операциями, в которых важны те же индексы цветов.
| Параметры и результат | Как понимать и применять |
|---|---|
| dst, src | Два GdImage: палитра источника копируется в назначение. Сопоставление цветов назначения обновляется; пиксели источника не копируются. |
| Возврат | void. Проверяйте палитру/пиксели назначения, а не bool результата. |
Скачать PNG
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$source = imagecreate(2, 2);
imagecolorallocate($source, 255, 0, 0);
imagecolorallocate($source, 0, 0, 255);
$target = imagecreate(2, 2);
imagecolorallocate($target, 0, 0, 0);
imagepalettecopy($target, $source);
echo imagecolorstotal($target), "\n";
Текстовая проверка результата
2
Это операция над таблицей цветов, не imagecopy.
Скачать PNG
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$source = imagecreate(2, 2);
imagecolorallocate($source, 255, 0, 0);
$target = imagecreate(2, 2);
imagecolorallocate($target, 255, 0, 0);
imagepalettecopy($target, $source);
echo imagecolorexact($target, 255, 0, 0), "\n";
Текстовая проверка результата
0
Для фотографии такая палитровая работа обычно не нужна.
Связанные операции: imagecopy, imagecolorexact.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecolormatchПодстроить цвета квантованной палитровой версии ближе к исходному полноцветному изображению.
PHP 8: GdImage · gd
imagecolormatch(GdImage $image1, GdImage $image2): trueПодстроить цвета квантованной палитровой версии ближе к исходному полноцветному изображению.
| Параметры и результат | Как понимать и применять |
|---|---|
| image1, image2 | Первое строго truecolor, второе строго palette, размеры должны совпадать. Сопоставляются пиксели и усредняются подходящие цвета палитры image2. |
| Возврат / ошибки | true; неправильная модель/размеры или пустая палитра вызывают ValueError. Это не поиск похожих изображений и не изменение image1. |
Скачать PNG
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$source = imagecreatetruecolor(2, 2);
imagefill($source, 0, 0, imagecolorallocate($source, 200, 10, 20));
$target = imagecreate(2, 2);
imagecolorallocate($target, 180, 0, 0);
var_dump(imagecolormatch($source, $target));
echo imagecolorsforindex($target, 0)["red"], "\n";
Текстовая проверка результата
bool(true)
200
Палитра назначения стала ближе к среднему цвету области исходника.
<?php
declare(strict_types=1);
$source = imagecreatetruecolor(4, 4);
$target = imagecreate(2, 2);
imagecolorallocate($target, 0, 0, 0);
echo imagesx($source) === imagesx($target) && imagesy($source) === imagesy($target) ? "match allowed\n" : "resize first\n";
Ожидаемый результат
resize first
Отдельно проверяются модели через imageistruecolor. Масштабирование — явный шаг до цветового сопоставления.
Связанные операции: imagetruecolortopalette, imagepalettecopy.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagesetpixelПоставить один пиксель: индикатор на схеме, маска или учебная пипетка.
PHP 8: GdImage · gd
imagesetpixel(GdImage $image, int $x, int $y, int $color): trueПоставить один пиксель: индикатор на схеме, маска или учебная пипетка.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| Аргументы / результат | x, y — целые координаты пикселя; color — цвет этой картинки. Возвращает bool. За пределами холста не используйте результат как доказательство рисования. |
| Координаты и состояние | Начало слева сверху, x вправо, y вниз. За клип-областью пиксели не меняются; предварительные thickness/style/blending могут изменить вид результата. Дробные расчёты явно округляйте к int. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$red = imagecolorallocate($image, 255, 0, 0);
imagesetpixel($image, 2, 2, $red);
$pixel = imagecolorsforindex($image, imagecolorat($image, 2, 2));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Холст 8×6; красная компонента 255 подтверждает попадание фигуры в нужную точку.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(240, 120);
$background = imagecolorallocate($image, 242, 247, 250);
imagefill($image, 0, 0, $background);
$red = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 20, 40, 55);
imagestring($image, 4, 16, 74, "CUP / 1290 RUB", $ink);
imagesetpixel($image, 20, 20, $red);
imagepng($image, "shape.png");
echo "shape.png 240x120\n";
Текстовая проверка результата
shape.png 240x120
Один пиксель при натуральном размере очень мал. Для заметного статуса интерфейса нужен круг или HTML-элемент; setpixel нужен точной сетке, маске и анализу. Откройте PNG и увеличьте область (20,20), чтобы увидеть выбранную точку. Получился отдельный файл для карточки товара; используйте его размеры как явные ограничения для координат.
Связанные операции: imagecolorallocate, imagesetthickness, imagesetclip.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagelineНарисовать ось графика или соединение блоков.
PHP 8: GdImage · gd
imageline(GdImage $image, int $x1, int $y1, int $x2, int $y2, int $color): trueНарисовать ось графика или соединение блоков.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| Аргументы / результат | x1, y1 и x2, y2 — начало и конец (включая конечные точки); color — обычный цвет или IMG_COLOR_STYLED/BRUSHED/STYLEDBRUSHED. Возвращает true. |
| Координаты и состояние | Начало слева сверху, x вправо, y вниз. За клип-областью пиксели не меняются; предварительные thickness/style/blending могут изменить вид результата. Дробные расчёты явно округляйте к int. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$red = imagecolorallocate($image, 255, 0, 0);
imageline($image, 1, 2, 6, 2, $red);
$pixel = imagecolorsforindex($image, imagecolorat($image, 3, 2));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Холст 8×6; красная компонента 255 подтверждает попадание фигуры в нужную точку.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(240, 120);
$background = imagecolorallocate($image, 242, 247, 250);
imagefill($image, 0, 0, $background);
$red = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 20, 40, 55);
imagestring($image, 4, 16, 74, "CUP / 1290 RUB", $ink);
imageline($image, 16, 55, 224, 55, $red);
imagepng($image, "shape.png");
echo "shape.png 240x120\n";
Текстовая проверка результата
shape.png 240x120
Пара (16,55) — начало, (224,55) — конец линии. Обе точки находятся на одной высоте, поэтому разделитель горизонтальный. Подпись ниже остаётся независимым элементом. Получился отдельный файл для карточки товара; используйте его размеры как явные ограничения для координат.
Связанные операции: imagecolorallocate, imagesetthickness, imagesetclip.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagerectangleОбвести область товара рамкой, сохранив изображение внутри.
PHP 8: GdImage · gd
imagerectangle(GdImage $image, int $x1, int $y1, int $x2, int $y2, int $color): trueОбвести область товара рамкой, сохранив изображение внутри.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| Аргументы / результат | x1, y1 и x2, y2 — противоположные углы; обе границы включены. color — цвет контура. Возвращает true. Для площади используйте filled-вариант. |
| Координаты и состояние | Начало слева сверху, x вправо, y вниз. За клип-областью пиксели не меняются; предварительные thickness/style/blending могут изменить вид результата. Дробные расчёты явно округляйте к int. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$red = imagecolorallocate($image, 255, 0, 0);
imagerectangle($image, 1, 1, 6, 4, $red);
$pixel = imagecolorsforindex($image, imagecolorat($image, 1, 2));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Холст 8×6; красная компонента 255 подтверждает попадание фигуры в нужную точку.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(240, 120);
$background = imagecolorallocate($image, 242, 247, 250);
imagefill($image, 0, 0, $background);
$red = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 20, 40, 55);
imagestring($image, 4, 16, 74, "CUP / 1290 RUB", $ink);
imagerectangle($image, 8, 8, 231, 111, $red);
imagepng($image, "shape.png");
echo "shape.png 240x120\n";
Текстовая проверка результата
shape.png 240x120
Рамка обводит область, но не закрашивает её середину: надпись читается. Чтобы сделать рамку толще, перед вызовом задайте imagesetthickness; отступ нужен, иначе часть толщины может уйти за край. Получился отдельный файл для карточки товара; используйте его размеры как явные ограничения для координат.
Связанные операции: imagecolorallocate, imagesetthickness, imagesetclip.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagefilledrectangleНарисовать плашку под подпись или заполнить фон.
PHP 8: GdImage · gd
imagefilledrectangle(GdImage $image, int $x1, int $y1, int $x2, int $y2, int $color): trueНарисовать плашку под подпись или заполнить фон.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| Аргументы / результат | x1, y1 и x2, y2 — противоположные углы включительно; color — цвет или поддерживаемый специальный заполнитель. Возвращает true. Прямоугольник ширины 8 от нуля заканчивается на x=7. |
| Координаты и состояние | Начало слева сверху, x вправо, y вниз. За клип-областью пиксели не меняются; предварительные thickness/style/blending могут изменить вид результата. Дробные расчёты явно округляйте к int. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$red = imagecolorallocate($image, 255, 0, 0);
imagefilledrectangle($image, 1, 1, 6, 4, $red);
$pixel = imagecolorsforindex($image, imagecolorat($image, 3, 2));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Холст 8×6; красная компонента 255 подтверждает попадание фигуры в нужную точку.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(240, 120);
$background = imagecolorallocate($image, 242, 247, 250);
imagefill($image, 0, 0, $background);
$red = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 20, 40, 55);
imagestring($image, 4, 16, 74, "CUP / 1290 RUB", $ink);
imagefilledrectangle($image, 0, 0, 239, 30, $red);
imagepng($image, "shape.png");
echo "shape.png 240x120\n";
Текстовая проверка результата
shape.png 240x120
Полоса занимает строки 0..30 включительно, то есть 31 пиксель по высоте. Для ровно 30 пикселей последняя координата была бы 29. Слова находятся ниже и не закрываются. Получился отдельный файл для карточки товара; используйте его размеры как явные ограничения для координат.
Связанные операции: imagecolorallocate, imagesetthickness, imagesetclip.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imageellipseОбвести круглый маркер или овал на схеме.
PHP 8: GdImage · gd
imageellipse(GdImage $image, int $center_x, int $center_y, int $width, int $height, int $color): trueОбвести круглый маркер или овал на схеме.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| Аргументы / результат | center_x, center_y — центр; width, height — полные диаметры, не радиусы; color — контур. Возвращает true. |
| Координаты и состояние | Начало слева сверху, x вправо, y вниз. За клип-областью пиксели не меняются; предварительные thickness/style/blending могут изменить вид результата. Дробные расчёты явно округляйте к int. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$red = imagecolorallocate($image, 255, 0, 0);
imageellipse($image, 4, 3, 4, 4, $red);
$pixel = imagecolorsforindex($image, imagecolorat($image, 6, 3));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Холст 8×6; красная компонента 255 подтверждает попадание фигуры в нужную точку.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(240, 120);
$background = imagecolorallocate($image, 242, 247, 250);
imagefill($image, 0, 0, $background);
$red = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 20, 40, 55);
imagestring($image, 4, 16, 74, "CUP / 1290 RUB", $ink);
imageellipse($image, 200, 78, 52, 36, $red);
imagepng($image, "shape.png");
echo "shape.png 240x120\n";
Текстовая проверка результата
shape.png 240x120
Это овал: центр (200,78), полный размер 52 × 36. Числа не задают координату противоположного угла. Внутри остаётся фон; для заполненного статуса выберите imagefilledellipse. Получился отдельный файл для карточки товара; используйте его размеры как явные ограничения для координат.
Связанные операции: imagecolorallocate, imagesetthickness, imagesetclip.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagefilledellipseНарисовать заполненный статус или круглую точку.
PHP 8: GdImage · gd
imagefilledellipse(GdImage $image, int $center_x, int $center_y, int $width, int $height, int $color): trueНарисовать заполненный статус или круглую точку.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| Аргументы / результат | center_x, center_y — центр; width, height — полные диаметры; color — заливка. Возвращает true. Круг получается при равных диаметрах. |
| Координаты и состояние | Начало слева сверху, x вправо, y вниз. За клип-областью пиксели не меняются; предварительные thickness/style/blending могут изменить вид результата. Дробные расчёты явно округляйте к int. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$red = imagecolorallocate($image, 255, 0, 0);
imagefilledellipse($image, 4, 3, 4, 4, $red);
$pixel = imagecolorsforindex($image, imagecolorat($image, 4, 3));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Холст 8×6; красная компонента 255 подтверждает попадание фигуры в нужную точку.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(240, 120);
$background = imagecolorallocate($image, 242, 247, 250);
imagefill($image, 0, 0, $background);
$red = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 20, 40, 55);
imagestring($image, 4, 16, 74, "CUP / 1290 RUB", $ink);
imagefilledellipse($image, 205, 78, 28, 28, $red);
imagepng($image, "shape.png");
echo "shape.png 240x120\n";
Текстовая проверка результата
shape.png 240x120
Диаметр 28 даёт радиус 14. Рядом с цветной точкой нужен текст статуса, чтобы смысл не зависел только от цвета. Для другой формы измените один диаметр. Получился отдельный файл для карточки товара; используйте его размеры как явные ограничения для координат.
Связанные операции: imagecolorallocate, imagesetthickness, imagesetclip.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagearcНарисовать часть круглой шкалы без заполнения сектора.
PHP 8: GdImage · gd
imagearc(GdImage $image, int $center_x, int $center_y, int $width, int $height, int $start_angle, int $end_angle, int $color): trueНарисовать часть круглой шкалы без заполнения сектора.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| Аргументы / результат | center_x, center_y — центр; width, height — диаметры; start_angle, end_angle — градусы: 0 справа (3 часа), рост по часовой стрелке. color — цвет. Возвращает true. |
| Координаты и состояние | Начало слева сверху, x вправо, y вниз. За клип-областью пиксели не меняются; предварительные thickness/style/blending могут изменить вид результата. Дробные расчёты явно округляйте к int. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$red = imagecolorallocate($image, 255, 0, 0);
imagearc($image, 4, 3, 4, 4, 0, 180, $red);
$pixel = imagecolorsforindex($image, imagecolorat($image, 6, 3));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Холст 8×6; красная компонента 255 подтверждает попадание фигуры в нужную точку.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(240, 120);
$background = imagecolorallocate($image, 242, 247, 250);
imagefill($image, 0, 0, $background);
$red = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 20, 40, 55);
imagestring($image, 4, 16, 74, "CUP / 1290 RUB", $ink);
imagearc($image, 195, 66, 64, 64, 0, 270, $red);
imagepng($image, "shape.png");
echo "shape.png 240x120\n";
Текстовая проверка результата
shape.png 240x120
Дуга идёт от правой точки по часовой стрелке на три четверти круга. Углы — градусы; 270 здесь иллюстрирует 75% полного оборота. Для переменного процента угол вычисляется как percent × 360 / 100. Получился отдельный файл для карточки товара; используйте его размеры как явные ограничения для координат.
Связанные операции: imagecolorallocate, imagesetthickness, imagesetclip.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagefilledarcНарисовать сектор диаграммы или часть заполненного круга.
PHP 8: GdImage · gd
imagefilledarc(GdImage $image, int $center_x, int $center_y, int $width, int $height, int $start_angle, int $end_angle, int $color, int $style): trueНарисовать сектор диаграммы или часть заполненного круга.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| Аргументы / результат | center_x, center_y — центр, width, height — диаметры; углы в градусах, 0 справа, ход по часовой стрелке; color — цвет, style — маска. PIE (ROUNDED) и CHORD альтернативны; CHORD замыкает прямой хордой. NOFILL рисует контур; EDGED вместе с NOFILL добавляет радиусы. Возвращает true. |
| Координаты и состояние | Начало слева сверху, x вправо, y вниз. За клип-областью пиксели не меняются; предварительные thickness/style/blending могут изменить вид результата. Дробные расчёты явно округляйте к int. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$red = imagecolorallocate($image, 255, 0, 0);
imagefilledarc($image, 4, 3, 4, 4, 0, 180, $red, IMG_ARC_PIE);
$pixel = imagecolorsforindex($image, imagecolorat($image, 4, 3));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Холст 8×6; красная компонента 255 подтверждает попадание фигуры в нужную точку.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(240, 120);
$background = imagecolorallocate($image, 242, 247, 250);
imagefill($image, 0, 0, $background);
$red = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 20, 40, 55);
imagestring($image, 4, 16, 74, "CUP / 1290 RUB", $ink);
imagefilledarc($image, 195, 62, 70, 70, 0, 270, $red, IMG_ARC_PIE);
imagepng($image, "shape.png");
echo "shape.png 240x120\n";
Текстовая проверка результата
shape.png 240x120
PIE соединяет концы дуги с центром, получая сектор. CHORD замкнул бы их прямой хордой. Подпишите значение отдельно: площадь цветного сектора сама по себе не сообщает число. Получился отдельный файл для карточки товара; используйте его размеры как явные ограничения для координат.
Связанные операции: imagecolorallocate, imagesetthickness, imagesetclip.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagepolygonЗамкнуть контур многоугольника, например зону на плане.
PHP 8: GdImage · gd
imagepolygon(GdImage $image, array $points, int $color): boolЗамкнуть контур многоугольника, например зону на плане.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| Аргументы / результат | points — плоский массив [x0, y0, x1, y1,...], минимум 3 вершины, чётное число элементов; color — цвет. Используйте 3 аргумента; отдельный num_points в старой 4-аргументной форме deprecated с 8.1, named arguments для перегрузки не поддерживаются. Возвращает bool, неверная структура вызывает ValueError. |
| Координаты и состояние | Начало слева сверху, x вправо, y вниз. За клип-областью пиксели не меняются; предварительные thickness/style/blending могут изменить вид результата. Дробные расчёты явно округляйте к int. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$red = imagecolorallocate($image, 255, 0, 0);
imagepolygon($image, [1, 1, 6, 1, 3, 4], $red);
$pixel = imagecolorsforindex($image, imagecolorat($image, 3, 1));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Холст 8×6; красная компонента 255 подтверждает попадание фигуры в нужную точку.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(240, 120);
$background = imagecolorallocate($image, 242, 247, 250);
imagefill($image, 0, 0, $background);
$red = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 20, 40, 55);
imagestring($image, 4, 16, 74, "CUP / 1290 RUB", $ink);
imagepolygon($image, [170, 25, 225, 55, 170, 85], $red);
imagepng($image, "shape.png");
echo "shape.png 240x120\n";
Текстовая проверка результата
shape.png 240x120
Массив читается попарно: первая вершина (170,25), вторая (225,55), третья (170,85). Функция сама соединяет последнюю с первой. Координаты можно менять независимо от текста. Получился отдельный файл для карточки товара; используйте его размеры как явные ограничения для координат.
Связанные операции: imagecolorallocate, imagesetthickness, imagesetclip.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imageopenpolygonНарисовать ломаную, например путь, который не надо замыкать к началу.
PHP 8: GdImage · gd
imageopenpolygon(GdImage $image, array $points, int $color): boolНарисовать ломаную, например путь, который не надо замыкать к началу.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| Аргументы / результат | points — плоские пары координат, минимум 2 вершины; color — цвет. Последняя точка не соединяется с первой. Используйте 3 аргумента, num_points deprecated с 8.1; named arguments перегрузки не поддерживаются. bool; ValueError при некорректном числе координат. |
| Координаты и состояние | Начало слева сверху, x вправо, y вниз. За клип-областью пиксели не меняются; предварительные thickness/style/blending могут изменить вид результата. Дробные расчёты явно округляйте к int. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$red = imagecolorallocate($image, 255, 0, 0);
imageopenpolygon($image, [1, 1, 6, 1, 3, 4], $red);
$pixel = imagecolorsforindex($image, imagecolorat($image, 3, 1));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Холст 8×6; красная компонента 255 подтверждает попадание фигуры в нужную точку.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(240, 120);
$background = imagecolorallocate($image, 242, 247, 250);
imagefill($image, 0, 0, $background);
$red = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 20, 40, 55);
imagestring($image, 4, 16, 74, "CUP / 1290 RUB", $ink);
imageopenpolygon($image, [15, 20, 75, 45, 140, 20, 225, 45], $red);
imagepng($image, "shape.png");
echo "shape.png 240x120\n";
Текстовая проверка результата
shape.png 240x120
Четыре точки соединены по порядку. Конец (225,45) не возвращается к началу (15,20), поэтому лишней диагонали нет. Этот вариант подходит траектории или графику. Получился отдельный файл для карточки товара; используйте его размеры как явные ограничения для координат.
Связанные операции: imagecolorallocate, imagesetthickness, imagesetclip.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagefilledpolygonЗаполнить зону на карте или треугольный указатель.
PHP 8: GdImage · gd
imagefilledpolygon(GdImage $image, array $points, int $color): boolЗаполнить зону на карте или треугольный указатель.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| Аргументы / результат | points — плоские пары, минимум 3 вершины, чётное число координат; color — цвет/заполнитель. 3 аргумента вместо deprecated num_points; не используйте named arguments для перегрузки. Возвращает bool, ошибочные точки дают ValueError. |
| Координаты и состояние | Начало слева сверху, x вправо, y вниз. За клип-областью пиксели не меняются; предварительные thickness/style/blending могут изменить вид результата. Дробные расчёты явно округляйте к int. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$red = imagecolorallocate($image, 255, 0, 0);
imagefilledpolygon($image, [1, 1, 6, 1, 3, 4], $red);
$pixel = imagecolorsforindex($image, imagecolorat($image, 3, 2));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Холст 8×6; красная компонента 255 подтверждает попадание фигуры в нужную точку.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(240, 120);
$background = imagecolorallocate($image, 242, 247, 250);
imagefill($image, 0, 0, $background);
$red = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 20, 40, 55);
imagestring($image, 4, 16, 74, "CUP / 1290 RUB", $ink);
imagefilledpolygon($image, [170, 25, 225, 55, 170, 85], $red);
imagepng($image, "shape.png");
echo "shape.png 240x120\n";
Текстовая проверка результата
shape.png 240x120
Те же три вершины дают уже заполненную область. Самопересекающиеся точки делают заливку менее очевидной: начинайте с простой формы и проверяйте контур. Получился отдельный файл для карточки товара; используйте его размеры как явные ограничения для координат.
Связанные операции: imagecolorallocate, imagesetthickness, imagesetclip.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagefillЗалить связную область одного цвета от выбранной точки, как инструмент «ведро» в редакторе.
PHP 8: GdImage · gd
imagefill(GdImage $image, int $x, int $y, int $color): trueЗалить связную область одного цвета от выбранной точки, как инструмент «ведро» в редакторе.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| x, y, color | Начальная точка внутри изображения; заменяется связная область её цвета. color — новый цвет или IMG_COLOR_TILED. Не означает «всегда залить весь холст». Возвращает bool. |
| Практика | Для гарантированного прямоугольного фона используйте imagefilledrectangle. Точечная flood-fill зависит от замкнутости границ и режима alpha. |
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$red = imagecolorallocate($image, 255, 0, 0);
imagefill($image, 0, 0, $red);
$pixel = imagecolorsforindex($image, imagecolorat($image, 7, 5));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Все чёрные пиксели связаны и перекрашиваются.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
$red = imagecolorallocate($image, 255, 0, 0);
imagerectangle($image, 1, 1, 6, 4, $white);
imagefill($image, 2, 2, $red);
$pixel = imagecolorsforindex($image, imagecolorat($image, 0, 0));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
$pixel = imagecolorsforindex($image, imagecolorat($image, 3, 2));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
0,0,0
255,0,0
Снаружи фон остался чёрным. Разрыв рамки может дать другой результат.
Связанные операции: imagefilltoborder, imagefilledrectangle.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagefilltoborderЗаполнить область до границы определённого цвета, даже если внутри встречаются разные цвета.
PHP 8: GdImage · gd
imagefilltoborder(GdImage $image, int $x, int $y, int $border_color, int $color): trueЗаполнить область до границы определённого цвета, даже если внутри встречаются разные цвета.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| x, y, border, color | Стартовая точка; border — цвет, на котором заливка останавливается; color — новая заливка. Рамка должна быть непрерывной. Возвращает true. |
| Отличие | imagefill следует равенству исходного цвета, filltoborder следует цвету границы. Сглаженная граница содержит несколько оттенков и может не удержать такую заливку. |
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$border = imagecolorallocate($image, 255, 255, 255);
$red = imagecolorallocate($image, 255, 0, 0);
imagerectangle($image, 1, 1, 6, 4, $border);
imagefilltoborder($image, 2, 2, $border, $red);
$pixel = imagecolorsforindex($image, imagecolorat($image, 3, 2));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Белая линия остаётся границей, а не заменяемой областью.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$border = imagecolorallocate($image, 255, 255, 255);
$red = imagecolorallocate($image, 255, 0, 0);
imagerectangle($image, 1, 1, 6, 4, $border);
imagefilltoborder($image, 2, 2, $border, $red);
$pixel = imagecolorsforindex($image, imagecolorat($image, 0, 0));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
0,0,0
Работает для небольших схем; не воспринимайте как устойчивое выделение объекта на фотографии.
Связанные операции: imagefill, imagerectangle.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagesetthicknessСделать линию графика заметнее, задав толщину до рисования.
PHP 8: GdImage · gd
imagesetthickness(GdImage $image, int $thickness): trueСделать линию графика заметнее, задав толщину до рисования.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| thickness | Целая толщина в пикселях для линий, прямоугольников, дуг и контуров полигонов. Практически задавайте положительное число. Начальная толщина 1. |
| Возврат | true. Меняет состояние последующих операций, не перерисовывает существующие линии; antialias не поддерживает thickness. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(9, 9);
$red = imagecolorallocate($image, 255, 0, 0);
imagesetthickness($image, 3);
imageline($image, 1, 4, 7, 4, $red);
$pixel = imagecolorsforindex($image, imagecolorat($image, 4, 3));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Соседний с центральной осью пиксель тоже закрашен.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(9, 9);
$red = imagecolorallocate($image, 255, 0, 0);
imagesetthickness($image, 3);
imageline($image, 0, 2, 8, 2, $red);
imagesetthickness($image, 1);
imageline($image, 0, 6, 8, 6, $red);
$pixel = imagecolorsforindex($image, imagecolorat($image, 4, 5));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
0,0,0
Если забыть сброс, тонкая сетка графика тоже станет толстой.
Связанные операции: imageline, imageantialias.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagesetstyleЗадать пунктир, чередование цветов или пропуски для линии графика.
PHP 8: GdImage · gd
imagesetstyle(GdImage $image, array $style): boolЗадать пунктир, чередование цветов или пропуски для линии графика.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| style | Непустой массив цветов пикселей; IMG_COLOR_TRANSPARENT оставляет пропуск. Рисовать затем с IMG_COLOR_STYLED; для включения/выключения кисти — IMG_COLOR_STYLEDBRUSHED. |
| Возврат / ошибки | bool; пустой массив недопустим. Стиль циклически повторяется по линии; это не CSS dasharray в геометрических единицах. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 2);
$red = imagecolorallocate($image, 255, 0, 0);
imagesetstyle($image, [$red, IMG_COLOR_TRANSPARENT]);
imageline($image, 0, 0, 7, 0, IMG_COLOR_STYLED);
$pixel = imagecolorsforindex($image, imagecolorat($image, 0, 0));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
$pixel = imagecolorsforindex($image, imagecolorat($image, 1, 0));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
0,0,0
Прозрачный элемент стиля пропускает рисование, а не присваивает alpha127.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 2);
$red = imagecolorallocate($image, 255, 0, 0);
$blue = imagecolorallocate($image, 0, 0, 255);
imagesetstyle($image, [$red, $red, $blue, $blue]);
imageline($image, 0, 0, 7, 0, IMG_COLOR_STYLED);
$pixel = imagecolorsforindex($image, imagecolorat($image, 2, 0));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
0,0,255
Одинаковый шаблон повторяется, пока хватает линии.
Связанные операции: imageline, imagedashedline, imagesetbrush.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagedashedlineПрочитать старый код пунктирной линии и заменить его явным стилем.
PHP 8: GdImage · gd
imagedashedline(GdImage $image, int $x1, int $y1, int $x2, int $y2, int $color): trueПрочитать старый код пунктирной линии и заменить его явным стилем.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| x1, y1, x2, y2, color | Начало, конец, цвет; координата (0,0) слева сверху. Возвращает true. Официальная документация помечает как устаревший способ, рекомендует imagesetstyle + imageline. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(20, 2);
$red = imagecolorallocate($image, 255, 0, 0);
var_dump(imagedashedline($image, 0, 0, 19, 0, $red));
Текстовая проверка результата
bool(true)
Длина штрихов не настраивается этим вызовом.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 2);
$red = imagecolorallocate($image, 255, 0, 0);
imagesetstyle($image, [$red, $red, IMG_COLOR_TRANSPARENT, IMG_COLOR_TRANSPARENT]);
imageline($image, 0, 0, 7, 0, IMG_COLOR_STYLED);
$pixel = imagecolorsforindex($image, imagecolorat($image, 0, 0));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
$pixel = imagecolorsforindex($image, imagecolorat($image, 2, 0));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
0,0,0
Стиль описывает нужный рисунок непосредственно, поэтому его проще менять.
Связанные операции: imagesetstyle, imageline.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagesetbrushИспользовать изображение как кисть для линий при построении схемы.
PHP 8: GdImage · gd
imagesetbrush(GdImage $image, GdImage $brush): trueИспользовать изображение как кисть для линий при построении схемы.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| brush / tile | Второй GdImage задаёт рисунок; затем IMG_COLOR_BRUSHED используется вместо обычного color. Для кисти со стилем доступен IMG_COLOR_STYLEDBRUSHED; tile может иметь прозрачный цвет. |
| Возврат / срок жизни | true. Храните ссылку на объект кисти/плитки всё время использования; после его освобождения не рисуйте специальным цветом до назначения нового. |
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$pattern = imagecreatetruecolor(1, 1);
imagefill($pattern, 0, 0, imagecolorallocate($pattern, 255, 0, 0));
imagesetbrush($image, $pattern);
imageline($image, 1, 2, 6, 2, IMG_COLOR_BRUSHED);
$pixel = imagecolorsforindex($image, imagecolorat($image, 3, 2));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Однопиксельный образец понятен для начала; более крупный создаёт узор или штамп.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$pattern = imagecreatetruecolor(1, 1);
imagefill($pattern, 0, 0, imagecolorallocate($pattern, 255, 0, 0));
imagesetbrush($image, $pattern);
imageline($image, 1, 2, 6, 2, IMG_COLOR_BRUSHED);
imagepng($image, "pattern.png");
echo getimagesize("pattern.png")["mime"], "\n";
Текстовая проверка результата
image/png
Сначала завершаем рисование, потом освобождаем pattern. Файл не содержит ссылку на объект GD.
Связанные операции: imagesetstyle, imageline.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagesettileИспользовать изображение как повторяющаяся плитка для заливки при построении схемы.
PHP 8: GdImage · gd
imagesettile(GdImage $image, GdImage $tile): trueИспользовать изображение как повторяющаяся плитка для заливки при построении схемы.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| brush / tile | Второй GdImage задаёт рисунок; затем IMG_COLOR_TILED используется вместо обычного color. Для кисти со стилем доступен IMG_COLOR_STYLEDBRUSHED; tile может иметь прозрачный цвет. |
| Возврат / срок жизни | true. Храните ссылку на объект кисти/плитки всё время использования; после его освобождения не рисуйте специальным цветом до назначения нового. |
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$pattern = imagecreatetruecolor(1, 1);
imagefill($pattern, 0, 0, imagecolorallocate($pattern, 255, 0, 0));
imagesettile($image, $pattern);
imagefilledrectangle($image, 1, 1, 6, 4, IMG_COLOR_TILED);
$pixel = imagecolorsforindex($image, imagecolorat($image, 3, 2));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Однопиксельный образец понятен для начала; более крупный создаёт узор или штамп.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$pattern = imagecreatetruecolor(1, 1);
imagefill($pattern, 0, 0, imagecolorallocate($pattern, 255, 0, 0));
imagesettile($image, $pattern);
imagefilledrectangle($image, 1, 1, 6, 4, IMG_COLOR_TILED);
imagepng($image, "pattern.png");
echo getimagesize("pattern.png")["mime"], "\n";
Текстовая проверка результата
image/png
Сначала завершаем рисование, потом освобождаем pattern. Файл не содержит ссылку на объект GD.
Связанные операции: imagesetstyle, imagefill.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imageantialiasСгладить ступеньки тонкой диагональной линии на непрозрачной схеме.
PHP 8: GdImage · gd
imageantialias(GdImage $image, bool $enable): trueСгладить ступеньки тонкой диагональной линии на непрозрачной схеме.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| enable | bool включает/выключает быстрое сглаживание линий и контурных полигонов. Работает только с truecolor; alpha, толщина и стиль не поддерживаются. |
| Возврат / ограничение | true. Прямое смешивание с фоном может дать ореолы на прозрачности; это не универсальное сглаживание каждого примитива/текста. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(12, 12);
var_dump(imageantialias($image, true));
$red = imagecolorallocate($image, 255, 0, 0);
imageline($image, 1, 1, 10, 7, $red);
echo imagesx($image), "\n";
Текстовая проверка результата
bool(true)
12
Сравнивайте края на реальном размере; сглаживание меняет соседние пиксели.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
imageantialias($image, false);
$red = imagecolorallocate($image, 255, 0, 0);
imageline($image, 1, 2, 6, 2, $red);
$pixel = imagecolorsforindex($image, imagecolorat($image, 3, 2));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Для pixel-art промежуточные оттенки нежелательны.
Связанные операции: imagesetthickness, imagesetstyle.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagesetclipОграничить рисование областью графика и не закрасить подписи вокруг него.
PHP 8: GdImage · gd
imagesetclip(GdImage $image, int $x1, int $y1, int $x2, int $y2): trueОграничить рисование областью графика и не закрасить подписи вокруг него.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| Область | Четыре целые границы x1, y1, x2, y2 включительно. Начальный clip охватывает весь холст. imagesetclip возвращает bool; imagegetclip возвращает [x1, y1, x2, y2]. Клип ограничивает рисование и чтение imagecolorat; перед чтением снаружи восстановите полный clip. Он не меняет размеры и не обрезает файл. |
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
imagesetclip($image, 1, 1, 6, 4);
echo implode(",", imagegetclip($image)), "\n";
Ожидаемый результат
1,1,6,4
Границы относятся к текущему холсту; начало координат не переносится.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
imagesetclip($image, 1, 1, 6, 4);
$red = imagecolorallocate($image, 255, 0, 0);
imagefilledrectangle($image, 0, 0, 7, 5, $red);
imagesetclip($image, 0, 0, imagesx($image) - 1, imagesy($image) - 1);
$pixel = imagecolorsforindex($image, imagecolorat($image, 0, 0));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
$pixel = imagecolorsforindex($image, imagecolorat($image, 3, 2));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
0,0,0
255,0,0
После области графика clip возвращён на весь холст, чтобы подписи снова рисовались.
Связанные операции: imagegetclip, imagecrop.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagegetclipОграничить рисование областью графика и не закрасить подписи вокруг него.
PHP 8: GdImage · gd
imagegetclip(GdImage $image): arrayОграничить рисование областью графика и не закрасить подписи вокруг него.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| Область | Четыре целые границы x1, y1, x2, y2 включительно. Начальный clip охватывает весь холст. imagesetclip возвращает bool; imagegetclip возвращает [x1, y1, x2, y2]. Клип ограничивает рисование и чтение imagecolorat; перед чтением снаружи восстановите полный clip. Он не меняет размеры и не обрезает файл. |
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
imagesetclip($image, 1, 1, 6, 4);
echo implode(",", imagegetclip($image)), "\n";
Ожидаемый результат
1,1,6,4
Границы относятся к текущему холсту; начало координат не переносится.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
imagesetclip($image, 1, 1, 6, 4);
$red = imagecolorallocate($image, 255, 0, 0);
imagefilledrectangle($image, 0, 0, 7, 5, $red);
imagesetclip($image, 0, 0, imagesx($image) - 1, imagesy($image) - 1);
$pixel = imagecolorsforindex($image, imagecolorat($image, 0, 0));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
$pixel = imagecolorsforindex($image, imagecolorat($image, 3, 2));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
0,0,0
255,0,0
После области графика clip возвращён на весь холст, чтобы подписи снова рисовались.
Связанные операции: imagesetclip, imagecrop.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecopyВставить логотип или фрагмент изображения в другой холст без изменения масштаба.
PHP 8: GdImage · gd
imagecopy(GdImage $dst_image, GdImage $src_image, int $dst_x, int $dst_y, int $src_x, int $src_y, int $src_width, int $src_height): trueВставить логотип или фрагмент изображения в другой холст без изменения масштаба.
| Параметры и результат | Как понимать и применять |
|---|---|
| dst_image, src_image | Назначение меняется, источник читается. Оба GdImage; не пути. Для перекрывающихся областей одного холста проще подготовить отдельный промежуточный объект. |
| Прямоугольники | dst_x, dst_y — куда вставить; src_x, src_y — откуда брать; src_width, src_height — размер копируемой области, без масштабирования. |
| Особенности | Учитывайте alpha/blending назначения. Для полной независимой копии создайте новый холст и перенесите все пиксели. |
| Возврат | true. Это изменение объекта назначения; файл появится только после imagepng/imagejpeg. Сохраняйте разумные положительные размеры и проверяйте границы. |
Вставка картинки похожа на перенос наклейки на лист: есть два холста, а меняется только тот, на который наклеивают.
В imagecopy($image, $source, 2, 1, 0, 0, 4, 4) первые два аргумента — куда и откуда. Пара 2,1 задаёт левый верхний угол вставки на $image; пара 0,0 — начало выбранного участка $source; последние 4,4 — его ширина и высота. Возвращаемый true — статус, а пиксели находятся в $image.
- Исходник: найдите цветной участок или край
- Вызов: проследите координаты и размер выбранной области
- Результат: сравните положение, размеры и цвет; число в выводе только подтверждает проверку
Скачать PNG
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$source = imagecreatetruecolor(4, 4);
imagefill($source, 0, 0, imagecolorallocate($source, 255, 0, 0));
$image = imagecreatetruecolor(8, 6);
imagecopy($image, $source, 2, 1, 0, 0, 4, 4);
$pixel = imagecolorsforindex($image, imagecolorat($image, 3, 2));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
$pixel = imagecolorsforindex($image, imagecolorat($image, 0, 0));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
0,0,0
Внутри вставки красный, вне её исходный чёрный фон.
Скачать PNG
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$source = imagecreatetruecolor(4, 4);
imagefill($source, 0, 0, imagecolorallocate($source, 255, 0, 0));
$image = imagecreatetruecolor(8, 6);
imagecopy($image, $source, 2, 1, 0, 0, 4, 4);
imagepng($image, "composition.png");
echo getimagesize("composition.png")[0], "x", getimagesize("composition.png")[1], "\n";
Текстовая проверка результата
8x6
В рабочем проекте загрузка, расчёт координат, композиция и кодирование остаются явными шагами.
Следующий шаг: Разместить логотип или подготовленную подпись поверх карточки. Для сохранения нужен объект с итоговыми пикселями, а не возвращённый флаг успеха.
Например, imagepng($image, "result.png") записывает файл. На HTML-странице <img src="result.png" alt="Результат обработки"> показывает его, если файл размещён в доступном каталоге сайта. PHP-путь на диске и URL в браузере — разные адреса; для веб-ответа напрямую нужен отдельный обработчик и Content-Type. imagepng объясняет оба варианта. В примерах, где итог назван иначе ($avatar, $large), передайте именно эту переменную.
Теперь применим операцию к целой карточке. Сначала код создаёт небольшой узнаваемый макет и сохраняет оригинал. Корпус — заполненный прямоугольник, ручка — эллипс, подпись — встроенный шрифт. Эти вызовы уже разобраны в imagefilledrectangle, imageellipse и imagestring. Блок после сохранения исходника выполняет текущую операцию; последняя запись создаёт файл результата.
Скачать PNG
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
// Учебный исходник карточки: в проекте его можно загрузить из PNG/JPEG.
$image = imagecreatetruecolor(160, 120);
$background = imagecolorallocate($image, 242, 238, 224);
imagefill($image, 0, 0, $background);
$blue = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 25, 45, 55);
imagefilledrectangle($image, 40, 20, 112, 84, $blue);
imageellipse($image, 112, 50, 36, 42, $blue);
imagestring($image, 3, 12, 99, "CUP / 1290 RUB", $ink);
imagepng($image, "product-source.png");
$stamp = imagecreatetruecolor(44, 18);
imagefill($stamp, 0, 0, imagecolorallocate($stamp, 255, 205, 75));
imagestring($stamp, 2, 6, 3, "SALE", imagecolorallocate($stamp, 40, 40, 40));
imagecopy($image, $stamp, 100, 64, 0, 0, 44, 18);
imagepng($image, "product-result.png");
echo "product-source.png -> product-result.png\n";
echo getimagesize("product-result.png")["mime"], "\n";
Текстовая проверка результата
product-source.png -> product-result.png
image/png
Исходная карточка и маленькая плашка подготовлены отдельно. Координаты 100,64 задают место внизу справа от корпуса; плашка 44×18 пересекается с товаром, поэтому видно, как работает наложение. imagecopy переносит непрозрачную плашку целиком. В браузере разместите рядом <img src="product-source.png" alt="Исходная карточка"> и <img src="product-result.png" alt="Обработанная карточка">. Текстовый вывод подтверждает файлы; сами различия смотрите на изображениях.
Связанные операции: imagecopyresampled, imagealphablending, imagesavealpha.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecopymergeСмешать непрозрачную плашку с фоном с заданной общей интенсивностью.
PHP 8: GdImage · gd
imagecopymerge(GdImage $dst_image, GdImage $src_image, int $dst_x, int $dst_y, int $src_x, int $src_y, int $src_width, int $src_height, int $pct): trueСмешать непрозрачную плашку с фоном с заданной общей интенсивностью.
| Параметры и результат | Как понимать и применять |
|---|---|
| dst_image, src_image | Назначение меняется, источник читается. Оба GdImage; не пути. Для перекрывающихся областей одного холста проще подготовить отдельный промежуточный объект. |
| Прямоугольники | dst_x, dst_y — куда вставить; src_x, src_y — откуда брать; src_width, src_height — размер копируемой области, без масштабирования. |
| Особенности | pct — целое 0–100: 0 без вклада источника,100 полная копия. Не заменяет правильную работу полного alpha; для прозрачного PNG-логотипа обычно imagecopy и blending. |
| Возврат | true. Это изменение объекта назначения; файл появится только после imagepng/imagejpeg. Сохраняйте разумные положительные размеры и проверяйте границы. |
Нужно, чтобы сквозь цветную плашку был виден фон: источник должен участвовать в результате лишь частично.
Последний аргумент pct — процент вклада источника:100 означает полную вставку,50 смешивает его с назначением. Координаты и размеры до процента читаются так же, как у imagecopy. Это общий процент плашки, не прозрачность каждого пикселя PNG.
- Исходник: найдите цветной участок или край
- Вызов: проследите координаты и размер выбранной области
- Результат: сравните положение, размеры и цвет; число в выводе только подтверждает проверку
Скачать PNG
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$source = imagecreatetruecolor(4, 4);
imagefill($source, 0, 0, imagecolorallocate($source, 255, 0, 0));
$image = imagecreatetruecolor(8, 6);
imagecopymerge($image, $source, 2, 1, 0, 0, 4, 4, 100);
$pixel = imagecolorsforindex($image, imagecolorat($image, 3, 2));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
$pixel = imagecolorsforindex($image, imagecolorat($image, 0, 0));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
0,0,0
Внутри вставки красный, вне её исходный чёрный фон.
Скачать PNG
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$source = imagecreatetruecolor(4, 4);
imagefill($source, 0, 0, imagecolorallocate($source, 255, 0, 0));
$image = imagecreatetruecolor(8, 6);
imagefill($image, 0, 0, imagecolorallocate($image, 0, 80, 220));
imagecopymerge($image, $source, 2, 1, 0, 0, 4, 4, 50);
imagepng($image, "composition.png");
echo getimagesize("composition.png")[0], "x", getimagesize("composition.png")[1], "\n";
Текстовая проверка результата
8x6
Снаружи прямоугольника сохраняется синий фон; внутри участвуют и фон, и красный источник. Процент 50 относится ко всему источнику; это не альфа каждого пикселя. Сравните второй пример imagecopymergegray: там фон под плашкой предварительно теряет цвет.
Следующий шаг: Сделать цветную подложку или отметку поверх уже нарисованной карточки. Для сохранения нужен объект с итоговыми пикселями, а не возвращённый флаг успеха.
Например, imagepng($image, "result.png") записывает файл. На HTML-странице <img src="result.png" alt="Результат обработки"> показывает его, если файл размещён в доступном каталоге сайта. PHP-путь на диске и URL в браузере — разные адреса; для веб-ответа напрямую нужен отдельный обработчик и Content-Type. imagepng объясняет оба варианта. В примерах, где итог назван иначе ($avatar, $large), передайте именно эту переменную.
Теперь применим операцию к целой карточке. Сначала код создаёт небольшой узнаваемый макет и сохраняет оригинал. Корпус — заполненный прямоугольник, ручка — эллипс, подпись — встроенный шрифт. Эти вызовы уже разобраны в imagefilledrectangle, imageellipse и imagestring. Блок после сохранения исходника выполняет текущую операцию; последняя запись создаёт файл результата.
Скачать PNG
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
// Учебный исходник карточки: в проекте его можно загрузить из PNG/JPEG.
$image = imagecreatetruecolor(160, 120);
$background = imagecolorallocate($image, 242, 238, 224);
imagefill($image, 0, 0, $background);
$blue = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 25, 45, 55);
imagefilledrectangle($image, 40, 20, 112, 84, $blue);
imageellipse($image, 112, 50, 36, 42, $blue);
imagestring($image, 3, 12, 99, "CUP / 1290 RUB", $ink);
imagepng($image, "product-source.png");
$stamp = imagecreatetruecolor(44, 18);
imagefill($stamp, 0, 0, imagecolorallocate($stamp, 255, 205, 75));
imagestring($stamp, 2, 6, 3, "SALE", imagecolorallocate($stamp, 40, 40, 40));
imagecopymerge($image, $stamp, 100, 64, 0, 0, 44, 18, 60);
imagepng($image, "product-result.png");
echo "product-source.png -> product-result.png\n";
echo getimagesize("product-result.png")["mime"], "\n";
Текстовая проверка результата
product-source.png -> product-result.png
image/png
Исходная карточка и маленькая плашка подготовлены отдельно. Координаты 100,64 задают место внизу справа от корпуса; плашка 44×18 пересекается с товаром, поэтому видно, как работает наложение. Вклад источника 60% позволяет увидеть фон под плашкой; для непрозрачного читаемого ценника такой эффект может быть не нужен. Цвета фона участвуют в смешивании. В браузере разместите рядом <img src="product-source.png" alt="Исходная карточка"> и <img src="product-result.png" alt="Обработанная карточка">. Текстовый вывод подтверждает файлы; сами различия смотрите на изображениях.
Связанные операции: imagecopyresampled, imagealphablending, imagesavealpha.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecopymergegrayНаложить источник, обесцветив фон под ним: эффект акцента на цветном объекте.
PHP 8: GdImage · gd
imagecopymergegray(GdImage $dst_image, GdImage $src_image, int $dst_x, int $dst_y, int $src_x, int $src_y, int $src_width, int $src_height, int $pct): trueНаложить источник, обесцветив фон под ним: эффект акцента на цветном объекте.
| Параметры и результат | Как понимать и применять |
|---|---|
| dst_image, src_image | Назначение меняется, источник читается. Оба GdImage; не пути. Для перекрывающихся областей одного холста проще подготовить отдельный промежуточный объект. |
| Прямоугольники | dst_x, dst_y — куда вставить; src_x, src_y — откуда брать; src_width, src_height — размер копируемой области, без масштабирования. |
| Особенности | pct — целое 0–100: при 0 область назначения становится серой, при 100 цвет источника сохраняется. Не универсальный alpha-compositor; для прозрачных PNG предпочитайте imagecopy. |
| Возврат | true. Это изменение объекта назначения; файл появится только после imagepng/imagejpeg. Сохраняйте разумные положительные размеры и проверяйте границы. |
Цветная отметка должна выделяться на приглушённом фоне: внутри её прямоугольника фон участвует в оттенках серого.
Последний аргумент pct регулирует долю источника. Вне прямоугольника назначения цвет не меняется. При 100 вклад фона исчезает, поэтому отличие от обычного copymerge видно именно в примере 50% на цветном фоне.
- Исходник: найдите цветной участок или край
- Вызов: проследите координаты и размер выбранной области
- Результат: сравните положение, размеры и цвет; число в выводе только подтверждает проверку
Скачать PNG
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$source = imagecreatetruecolor(4, 4);
imagefill($source, 0, 0, imagecolorallocate($source, 255, 0, 0));
$image = imagecreatetruecolor(8, 6);
imagecopymergegray($image, $source, 2, 1, 0, 0, 4, 4, 100);
$pixel = imagecolorsforindex($image, imagecolorat($image, 3, 2));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
$pixel = imagecolorsforindex($image, imagecolorat($image, 0, 0));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
0,0,0
Внутри вставки красный, вне её исходный чёрный фон.
Скачать PNG
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$source = imagecreatetruecolor(4, 4);
imagefill($source, 0, 0, imagecolorallocate($source, 255, 0, 0));
$image = imagecreatetruecolor(8, 6);
imagefill($image, 0, 0, imagecolorallocate($image, 0, 80, 220));
imagecopymergegray($image, $source, 2, 1, 0, 0, 4, 4, 50);
imagepng($image, "composition.png");
echo getimagesize("composition.png")[0], "x", getimagesize("composition.png")[1], "\n";
Текстовая проверка результата
8x6
Снаружи прямоугольника сохраняется синий фон; внутри участвуют и фон, и красный источник. Под плашкой фон участвует в оттенках серого, тогда как вне области он остаётся синим. Сравните второй пример imagecopymerge с теми же исходниками: его фон участвует цветным.
Следующий шаг: Сравнить обычное смешивание и смешивание с обесцвеченным фоном. Для сохранения нужен объект с итоговыми пикселями, а не возвращённый флаг успеха.
Например, imagepng($image, "result.png") записывает файл. На HTML-странице <img src="result.png" alt="Результат обработки"> показывает его, если файл размещён в доступном каталоге сайта. PHP-путь на диске и URL в браузере — разные адреса; для веб-ответа напрямую нужен отдельный обработчик и Content-Type. imagepng объясняет оба варианта. В примерах, где итог назван иначе ($avatar, $large), передайте именно эту переменную.
Теперь применим операцию к целой карточке. Сначала код создаёт небольшой узнаваемый макет и сохраняет оригинал. Корпус — заполненный прямоугольник, ручка — эллипс, подпись — встроенный шрифт. Эти вызовы уже разобраны в imagefilledrectangle, imageellipse и imagestring. Блок после сохранения исходника выполняет текущую операцию; последняя запись создаёт файл результата.
Скачать PNG
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
// Учебный исходник карточки: в проекте его можно загрузить из PNG/JPEG.
$image = imagecreatetruecolor(160, 120);
$background = imagecolorallocate($image, 242, 238, 224);
imagefill($image, 0, 0, $background);
$blue = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 25, 45, 55);
imagefilledrectangle($image, 40, 20, 112, 84, $blue);
imageellipse($image, 112, 50, 36, 42, $blue);
imagestring($image, 3, 12, 99, "CUP / 1290 RUB", $ink);
imagepng($image, "product-source.png");
$stamp = imagecreatetruecolor(44, 18);
imagefill($stamp, 0, 0, imagecolorallocate($stamp, 255, 205, 75));
imagestring($stamp, 2, 6, 3, "SALE", imagecolorallocate($stamp, 40, 40, 40));
imagecopymergegray($image, $stamp, 100, 64, 0, 0, 44, 18, 60);
imagepng($image, "product-result.png");
echo "product-source.png -> product-result.png\n";
echo getimagesize("product-result.png")["mime"], "\n";
Текстовая проверка результата
product-source.png -> product-result.png
image/png
Исходная карточка и маленькая плашка подготовлены отдельно. Координаты 100,64 задают место внизу справа от корпуса; плашка 44×18 пересекается с товаром, поэтому видно, как работает наложение. Вклад источника 60% позволяет увидеть фон под плашкой; для непрозрачного читаемого ценника такой эффект может быть не нужен. imagecopymergegray дополнительно меняет участие фона на серое. В браузере разместите рядом <img src="product-source.png" alt="Исходная карточка"> и <img src="product-result.png" alt="Обработанная карточка">. Текстовый вывод подтверждает файлы; сами различия смотрите на изображениях.
Связанные операции: imagecopyresampled, imagealphablending, imagesavealpha.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecopyresizedБыстро изменить размер пиксельной схемы без качественного пересчёта соседей.
PHP 8: GdImage · gd
imagecopyresized(GdImage $dst_image, GdImage $src_image, int $dst_x, int $dst_y, int $src_x, int $src_y, int $dst_width, int $dst_height, int $src_width, int $src_height): trueБыстро изменить размер пиксельной схемы без качественного пересчёта соседей.
| Параметры и результат | Как понимать и применять |
|---|---|
| dst_image, src_image | Назначение меняется, источник читается. Оба GdImage; не пути. Для перекрывающихся областей одного холста проще подготовить отдельный промежуточный объект. |
| Прямоугольники | dst_x, dst_y — куда вставить; src_x, src_y — откуда брать; dst_width, dst_height и src_width, src_height описывают два прямоугольника: их отношение задаёт масштаб. |
| Особенности | Ближайшие пиксели дают ступеньки при уменьшении фото, зато сохраняют характер pixel-art. Для truecolor фотографий выбирайте resampled. |
| Возврат | true. Это изменение объекта назначения; файл появится только после imagepng/imagejpeg. Сохраняйте разумные положительные размеры и проверяйте границы. |
Готовый значок должен занять меньший прямоугольник внутри большой карточки: размер вставки отличается от размера исходника.
После координат следуют две пары размеров: сначала ширина/высота назначения, потом ширина/высота источника. Значения 3,3,4,4 означают взять 4×4 и поместить в 3×3. Функция меняет $image, а $source сохраняется.
- Исходник: найдите цветной участок или край
- Вызов: проследите координаты и размер выбранной области
- Результат: сравните положение, размеры и цвет; число в выводе только подтверждает проверку
Скачать PNG
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$source = imagecreatetruecolor(4, 4);
imagefill($source, 0, 0, imagecolorallocate($source, 255, 0, 0));
$image = imagecreatetruecolor(8, 6);
imagecopyresized($image, $source, 2, 1, 0, 0, 4, 4, 4, 4);
$pixel = imagecolorsforindex($image, imagecolorat($image, 3, 2));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
$pixel = imagecolorsforindex($image, imagecolorat($image, 0, 0));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
0,0,0
Внутри вставки красный, вне её исходный чёрный фон.
Скачать PNG
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$source = imagecreatetruecolor(4, 4);
imagefill($source, 0, 0, imagecolorallocate($source, 255, 0, 0));
$white = imagecolorallocate($source, 255, 255, 255);
imagefilledrectangle($source, 0, 0, 1, 1, $white);
$image = imagecreatetruecolor(8, 6);
imagecopyresized($image, $source, 2, 1, 0, 0, 3, 3, 4, 4);
imagepng($image, "composition.png");
echo getimagesize("composition.png")[0], "x", getimagesize("composition.png")[1], "\n";
Текстовая проверка результата
8x6
Белый угол на красном значке помогает увидеть пересчёт. Источник 4×4 читается целиком, но занимает в результате 3×3; чёрные поля холста остаются. resized выбирает исходные пиксели: граница остаётся ступенчатой. Сравните второй пример imagecopyresampled с теми же данными.
Следующий шаг: Масштабировать пиксельную схему; для фотографии сравнить с resampled. Для сохранения нужен объект с итоговыми пикселями, а не возвращённый флаг успеха.
Например, imagepng($image, "result.png") записывает файл. На HTML-странице <img src="result.png" alt="Результат обработки"> показывает его, если файл размещён в доступном каталоге сайта. PHP-путь на диске и URL в браузере — разные адреса; для веб-ответа напрямую нужен отдельный обработчик и Content-Type. imagepng объясняет оба варианта. В примерах, где итог назван иначе ($avatar, $large), передайте именно эту переменную.
Теперь применим операцию к целой карточке. Сначала код создаёт небольшой узнаваемый макет и сохраняет оригинал. Корпус — заполненный прямоугольник, ручка — эллипс, подпись — встроенный шрифт. Эти вызовы уже разобраны в imagefilledrectangle, imageellipse и imagestring. Блок после сохранения исходника выполняет текущую операцию; последняя запись создаёт файл результата.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
// Учебный исходник карточки: в проекте его можно загрузить из PNG/JPEG.
$image = imagecreatetruecolor(160, 120);
$background = imagecolorallocate($image, 242, 238, 224);
imagefill($image, 0, 0, $background);
$blue = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 25, 45, 55);
imagefilledrectangle($image, 40, 20, 112, 84, $blue);
imageellipse($image, 112, 50, 36, 42, $blue);
imagestring($image, 3, 12, 99, "CUP / 1290 RUB", $ink);
imagepng($image, "product-source.png");
$result = imagecreatetruecolor(80, 60);
imagecopyresized($result, $image, 0, 0, 0, 0, 80, 60, 160, 120);
imagepng($result, "product-result.png");
echo "product-source.png -> product-result.png\n";
echo getimagesize("product-result.png")["mime"], "\n";
Текстовая проверка результата
product-source.png -> product-result.png
image/png
Первые 80,60 — размеры назначения, последние 160,120 — исходника. Оба холста нужны, потому что функция копирует в уже существующее место. Сравните наклонную ручку и буквы с парным примером imagecopyresampled: на деталях видна разница выборки пикселей. В браузере разместите рядом <img src="product-source.png" alt="Исходная карточка"> и <img src="product-result.png" alt="Обработанная карточка">. Текстовый вывод подтверждает файлы; сами различия смотрите на изображениях.
Связанные операции: imagecopyresampled, imagealphablending, imagesavealpha.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecopyresampledПодготовить качественную миниатюру фотографии с пересчётом цветов соседних пикселей.
PHP 8: GdImage · gd
imagecopyresampled(GdImage $dst_image, GdImage $src_image, int $dst_x, int $dst_y, int $src_x, int $src_y, int $dst_width, int $dst_height, int $src_width, int $src_height): trueПодготовить качественную миниатюру фотографии с пересчётом цветов соседних пикселей.
| Параметры и результат | Как понимать и применять |
|---|---|
| dst_image, src_image | Назначение меняется, источник читается. Оба GdImage; не пути. Для перекрывающихся областей одного холста проще подготовить отдельный промежуточный объект. |
| Прямоугольники | dst_x, dst_y — куда вставить; src_x, src_y — откуда брать; dst_width, dst_height и src_width, src_height описывают два прямоугольника: их отношение задаёт масштаб. |
| Особенности | Пересчёт качественнее и обычно дороже resized. На палитровом назначении доступные цвета ограничены; предпочтительно truecolor. Размер исходного файла не определяет память распакованных пикселей. |
| Возврат | true. Это изменение объекта назначения; файл появится только после imagepng/imagejpeg. Сохраняйте разумные положительные размеры и проверяйте границы. |
Фотография должна стать миниатюрой без резких ступенек: один новый пиксель получает вклад нескольких исходных.
Две пары размеров после координат относятся к назначению и источнику в этом порядке. На бело-красной границе при 4×4→3×3 возникают промежуточные цвета. Они являются результатом пересчёта, а не ошибкой цвета.
- Исходник: найдите цветной участок или край
- Вызов: проследите координаты и размер выбранной области
- Результат: сравните положение, размеры и цвет; число в выводе только подтверждает проверку
Скачать PNG
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$source = imagecreatetruecolor(4, 4);
imagefill($source, 0, 0, imagecolorallocate($source, 255, 0, 0));
$image = imagecreatetruecolor(8, 6);
imagecopyresampled($image, $source, 2, 1, 0, 0, 4, 4, 4, 4);
$pixel = imagecolorsforindex($image, imagecolorat($image, 3, 2));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
$pixel = imagecolorsforindex($image, imagecolorat($image, 0, 0));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
0,0,0
Внутри вставки красный, вне её исходный чёрный фон.
Скачать PNG
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$source = imagecreatetruecolor(4, 4);
imagefill($source, 0, 0, imagecolorallocate($source, 255, 0, 0));
$white = imagecolorallocate($source, 255, 255, 255);
imagefilledrectangle($source, 0, 0, 1, 1, $white);
$image = imagecreatetruecolor(8, 6);
imagecopyresampled($image, $source, 2, 1, 0, 0, 3, 3, 4, 4);
imagepng($image, "composition.png");
echo getimagesize("composition.png")[0], "x", getimagesize("composition.png")[1], "\n";
Текстовая проверка результата
8x6
Белый угол на красном значке помогает увидеть пересчёт. Источник 4×4 читается целиком, но занимает в результате 3×3; чёрные поля холста остаются. resampled усредняет вклад соседних пикселей: на границе белого и красного появляются промежуточные оттенки. Сравните второй пример imagecopyresized с теми же данными.
Следующий шаг: Вставить фотографию в заранее подготовленный холст превью. Для сохранения нужен объект с итоговыми пикселями, а не возвращённый флаг успеха.
Например, imagepng($image, "result.png") записывает файл. На HTML-странице <img src="result.png" alt="Результат обработки"> показывает его, если файл размещён в доступном каталоге сайта. PHP-путь на диске и URL в браузере — разные адреса; для веб-ответа напрямую нужен отдельный обработчик и Content-Type. imagepng объясняет оба варианта. В примерах, где итог назван иначе ($avatar, $large), передайте именно эту переменную.
Теперь применим операцию к целой карточке. Сначала код создаёт небольшой узнаваемый макет и сохраняет оригинал. Корпус — заполненный прямоугольник, ручка — эллипс, подпись — встроенный шрифт. Эти вызовы уже разобраны в imagefilledrectangle, imageellipse и imagestring. Блок после сохранения исходника выполняет текущую операцию; последняя запись создаёт файл результата.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
// Учебный исходник карточки: в проекте его можно загрузить из PNG/JPEG.
$image = imagecreatetruecolor(160, 120);
$background = imagecolorallocate($image, 242, 238, 224);
imagefill($image, 0, 0, $background);
$blue = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 25, 45, 55);
imagefilledrectangle($image, 40, 20, 112, 84, $blue);
imageellipse($image, 112, 50, 36, 42, $blue);
imagestring($image, 3, 12, 99, "CUP / 1290 RUB", $ink);
imagepng($image, "product-source.png");
$result = imagecreatetruecolor(80, 60);
imagecopyresampled($result, $image, 0, 0, 0, 0, 80, 60, 160, 120);
imagepng($result, "product-result.png");
echo "product-source.png -> product-result.png\n";
echo getimagesize("product-result.png")["mime"], "\n";
Текстовая проверка результата
product-source.png -> product-result.png
image/png
Первые 80,60 — размеры назначения, последние 160,120 — исходника. Оба холста нужны, потому что функция копирует в уже существующее место. Сравните наклонную ручку и буквы с парным примером imagecopyresized: на деталях видна разница выборки пикселей. В браузере разместите рядом <img src="product-source.png" alt="Исходная карточка"> и <img src="product-result.png" alt="Обработанная карточка">. Текстовый вывод подтверждает файлы; сами различия смотрите на изображениях.
Связанные операции: imagescale, imagealphablending, imagesavealpha.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecropВырезать прямоугольник для аватара или убрать известные поля скана.
PHP 8: GdImage · gd
imagecrop(GdImage $image, array $rectangle): GdImage|falseВырезать прямоугольник для аватара или убрать известные поля скана.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| rectangle | Ассоциативный массив x, y, width, height: координата начала и размеры. Размер — не последняя координата. Проверяйте положительность и попадание в холст до вызова. |
| Возврат | Новый GdImage либо false, исходный объект не меняется. Для отображения результата сохраните возвращённый объект, а не старый. |
В каталоге нужны квадратные аватары, хотя исходные фото имеют разные пропорции. Обрезка оставляет выбранную область без растяжения предмета.
В $crop = imagecrop($image, ["x" => 1, "y" => 1, "width" => 2, "height" => 3]) массив описывает прямоугольник. x/y — начало в исходнике, width/height — число пикселей, не координаты конца. Результат сохраняется в новой переменной $crop; старый $image целиком остаётся в памяти.
- Исходник: найдите цветной участок или край
- Вызов: проследите координаты и размер выбранной области
- Результат: сравните положение, размеры и цвет; число в выводе только подтверждает проверку
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$background = imagecolorallocate($image, 238, 238, 238);
imagefill($image, 0, 0, $background);
$red = imagecolorallocate($image, 220, 60, 50);
$blue = imagecolorallocate($image, 20, 110, 190);
imagefilledrectangle($image, 1, 1, 4, 3, $red);
imagefilledrectangle($image, 4, 3, 6, 4, $blue);
imagesetpixel($image, 1, 2, $blue);
$crop = imagecrop($image, ["x" => 1, "y" => 1, "width" => 2, "height" => 3]);
echo imagesx($crop), "x", imagesy($crop), "\n";
echo imagesx($image), "x", imagesy($image), "\n";
Текстовая проверка результата
2x3
8x6
Светлый фон и два цветных участка позволяют узнать исходник. Внутри выбранной области есть синяя точка: после обрезки она остаётся на новом маленьком холсте. x=1, y=1 задают его левый верхний угол; ширина 2 и высота 3 сохраняют столбцы 1–2 и строки 1–3. Новый объект позволяет сохранить полный оригинал.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(12, 8);
$background = imagecolorallocate($image, 238, 238, 238);
imagefill($image, 0, 0, $background);
$red = imagecolorallocate($image, 220, 60, 50);
$blue = imagecolorallocate($image, 20, 110, 190);
imagefilledrectangle($image, 1, 1, 6, 4, $red);
imagefilledrectangle($image, 6, 4, 10, 6, $blue);
imagesetpixel($image, 1, 2, $blue);
$size = min(imagesx($image), imagesy($image));
$x = intdiv(imagesx($image) - $size, 2);
$y = intdiv(imagesy($image) - $size, 2);
$avatar = imagecrop($image, ["x" => $x, "y" => $y, "width" => $size, "height" => $size]);
echo imagesx($avatar), "x", imagesy($avatar), "\n";
Текстовая проверка результата
8x8
Исходник 12×8 шире квадрата: x=2, y=0 отсекают по 2 столбца слева и справа. Сравните цветные участки до и после. Центральная обрезка не распознаёт лицо; интерфейс загрузки может дать человеку выбрать область.
Следующий шаг: Сначала выбрать область товара/лица, затем уменьшить её через imagescale. Для сохранения нужен объект с итоговыми пикселями, а не возвращённый флаг успеха.
Например, imagepng($crop, "result.png") записывает файл. На HTML-странице <img src="result.png" alt="Результат обработки"> показывает его, если файл размещён в доступном каталоге сайта. PHP-путь на диске и URL в браузере — разные адреса; для веб-ответа напрямую нужен отдельный обработчик и Content-Type. imagepng объясняет оба варианта. В примерах, где итог назван иначе ($avatar, $large), передайте именно эту переменную.
Теперь применим операцию к целой карточке. Сначала код создаёт небольшой узнаваемый макет и сохраняет оригинал. Корпус — заполненный прямоугольник, ручка — эллипс, подпись — встроенный шрифт. Эти вызовы уже разобраны в imagefilledrectangle, imageellipse и imagestring. Блок после сохранения исходника выполняет текущую операцию; последняя запись создаёт файл результата.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
// Учебный исходник карточки: в проекте его можно загрузить из PNG/JPEG.
$image = imagecreatetruecolor(160, 120);
$background = imagecolorallocate($image, 242, 238, 224);
imagefill($image, 0, 0, $background);
$blue = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 25, 45, 55);
imagefilledrectangle($image, 40, 20, 112, 84, $blue);
imageellipse($image, 112, 50, 36, 42, $blue);
imagestring($image, 3, 12, 99, "CUP / 1290 RUB", $ink);
imagepng($image, "product-source.png");
$result = imagecrop($image, ["x" => 32, "y" => 12, "width" => 104, "height" => 80]);
imagepng($result, "product-result.png");
echo "product-source.png -> product-result.png\n";
echo getimagesize("product-result.png")["mime"], "\n";
Текстовая проверка результата
product-source.png -> product-result.png
image/png
Прямоугольник начинается в 32,12 и захватывает чашку с ручкой, но заканчивается раньше ценника. Обрезка выбирает содержимое, не уменьшает его. Если затем нужно превью фиксированной ширины, передайте $result в imagescale. В браузере разместите рядом <img src="product-source.png" alt="Исходная карточка"> и <img src="product-result.png" alt="Обработанная карточка">. Текстовый вывод подтверждает файлы; сами различия смотрите на изображениях.
Связанные операции: imagecropauto, imagescale.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecropautoАвтоматически убрать однотонные поля вокруг небольшого рисунка.
PHP 8: GdImage · gd
imagecropauto(GdImage $image, int $mode = 0, float $threshold = 0.5, int $color = -1): GdImage|falseАвтоматически убрать однотонные поля вокруг небольшого рисунка.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| mode | IMG_CROP_DEFAULT сейчас равен прозрачной обрезке; TRANSPARENT убирает прозрачный фон, BLACK/WHITE — чёрный/белый, SIDES оценивает фон по четырём углам, THRESHOLD сравнивает с color. |
| threshold, color | В THRESHOLD порог различия в процентах (default0.5) по расстоянию RGB(a), color — packed RGB или индекс палитры. В других режимах игнорируются. |
| Возврат / версии | Новый GdImage либо false, в том числе когда обрезано всё. С 7.4 DEFAULT больше не откатывается к SIDES, алгоритм порога согласован bundled/system GD. Не передавайте историческое −1 вместо актуальной константы. |
Вокруг рисунка осталась одноцветная рамка неизвестной толщины. Можно попросить GD найти непустую область по выбранному правилу.
В $crop = imagecropauto($image, IMG_CROP_WHITE) константа означает удаление белых полей. Новый $crop может оказаться false, если полями было всё изображение: в этом случае нечего сохранять. Не вызывайте imagesx или imagepng для false.
- Исходник: найдите цветной участок или край
- Вызов: проследите координаты и размер выбранной области
- Результат: сравните положение, размеры и цвет; число в выводе только подтверждает проверку
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$red = imagecolorallocate($image, 255, 0, 0);
imagefilledrectangle($image, 2, 1, 5, 4, $red);
$crop = imagecropauto($image, IMG_CROP_WHITE);
echo imagesx($crop), "x", imagesy($crop), "\n";
Текстовая проверка результата
4x4
Подходит для иллюстрации с чистым фоном; JPEG-артефакты потребуют осмысленного порога.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$crop = imagecropauto($image, IMG_CROP_BLACK);
echo $crop === false ? "nothing remains\n" : "image remains\n";
Текстовая проверка результата
nothing remains
false здесь нормальный результат отсутствия содержимого, а не обязательно поломка GD.
Следующий шаг: Подготовить значок без лишних полей перед сборкой каталога. Для сохранения нужен объект с итоговыми пикселями, а не возвращённый флаг успеха.
Например, imagepng($crop, "result.png") записывает файл. На HTML-странице <img src="result.png" alt="Результат обработки"> показывает его, если файл размещён в доступном каталоге сайта. PHP-путь на диске и URL в браузере — разные адреса; для веб-ответа напрямую нужен отдельный обработчик и Content-Type. imagepng объясняет оба варианта. В примерах, где итог назван иначе ($avatar, $large), передайте именно эту переменную.
Теперь применим операцию к целой карточке. Сначала код создаёт небольшой узнаваемый макет и сохраняет оригинал. Корпус — заполненный прямоугольник, ручка — эллипс, подпись — встроенный шрифт. Эти вызовы уже разобраны в imagefilledrectangle, imageellipse и imagestring. Блок после сохранения исходника выполняет текущую операцию; последняя запись создаёт файл результата.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
// Учебный исходник карточки: в проекте его можно загрузить из PNG/JPEG.
$image = imagecreatetruecolor(160, 120);
$background = imagecolorallocate($image, 242, 238, 224);
imagefill($image, 0, 0, $background);
$blue = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 25, 45, 55);
imagefilledrectangle($image, 40, 20, 112, 84, $blue);
imageellipse($image, 112, 50, 36, 42, $blue);
imagestring($image, 3, 12, 99, "CUP / 1290 RUB", $ink);
imagepng($image, "product-source.png");
$result = imagecropauto($image, IMG_CROP_SIDES);
imagepng($result, "product-result.png");
echo "product-source.png -> product-result.png\n";
echo getimagesize("product-result.png")["mime"], "\n";
Текстовая проверка результата
product-source.png -> product-result.png
image/png
Четыре угла имеют одинаковый светлый фон, поэтому SIDES использует его для поиска содержимого. В отличие от обрезки по заданным координатам здесь сохраняется и подпись: она тоже непустая часть картинки. Для фотографии с разноцветными краями этот способ может не соответствовать вашему замыслу. В браузере разместите рядом <img src="product-source.png" alt="Исходная карточка"> и <img src="product-result.png" alt="Обработанная карточка">. Текстовый вывод подтверждает файлы; сами различия смотрите на изображениях.
Связанные операции: imagecrop, imagecolorat.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagescaleСоздать уменьшенную версию картинки одной операцией, сохранив оригинал.
PHP 8: GdImage · gd
imagescale(GdImage $image, int $width, int $height = -1, int $mode = 3): GdImage|falseСоздать уменьшенную версию картинки одной операцией, сохранив оригинал.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| width, height | Новая положительная ширина; height=-1/пропуск сохраняет пропорции. Если обе стороны заданы, картинка растягивается в них. |
| mode | Default IMG_BILINEAR_FIXED. NEAREST_NEIGHBOUR для pixel-art; BICUBIC/BICUBIC_FIXED и другие поддержанные ядра для пересчёта; IMG_WEIGHTED4 пока не поддержан. |
| Возврат / ошибки | Новый GdImage либо false. PHP8.4+ бросает ValueError при переполнении размеров/неверном mode. Уменьшайте после проверки исходных размеров; декодирование уже требует память полного входа. |
Для списка товаров достаточно небольшой картинки: посетителю не нужен исходник большого размера в каждой строке.
В $small = imagescale($image, 6) число 6 — новая ширина в пикселях. Высота не задана, поэтому вычисляется пропорционально. $image не меняется; если сохранить его вместо $small, вы случайно снова получите большой файл.
- Исходник: найдите цветной участок или край
- Вызов: проследите координаты и размер выбранной области
- Результат: сравните положение, размеры и цвет; число в выводе только подтверждает проверку
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(12, 8);
$background = imagecolorallocate($image, 238, 238, 238);
imagefill($image, 0, 0, $background);
$red = imagecolorallocate($image, 220, 60, 50);
$blue = imagecolorallocate($image, 20, 110, 190);
imagefilledrectangle($image, 1, 1, 6, 4, $red);
imagefilledrectangle($image, 6, 4, 10, 6, $blue);
imagesetpixel($image, 1, 2, $blue);
$small = imagescale($image, 6);
echo imagesx($small), "x", imagesy($small), "\n";
echo imagesx($image), "\n";
Текстовая проверка результата
6x4
12
В исходнике 12×8 видны красный и синий участки на светлом фоне. Результат 6×4 уменьшает оба измерения вдвое, сохраняя их положение и пропорции; исходный объект остался шириной 12. imagescale возвращает другой объект, поэтому показываем $small, а не $image.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(2, 2);
$red = imagecolorallocate($image, 255, 0, 0);
imagesetpixel($image, 0, 0, $red);
$large = imagescale($image, 4, 4, IMG_NEAREST_NEIGHBOUR);
echo imagecolorsforindex($large, imagecolorat($large, 0, 0))["red"], "\n";
Текстовая проверка результата
255
Для фото ближайший сосед даёт ступеньки, зато для технической пиксельной схемы предсказуем.
Следующий шаг: Создать отдельное превью и сохранить исходник для страницы товара. Для сохранения нужен объект с итоговыми пикселями, а не возвращённый флаг успеха.
Например, imagepng($small, "result.png") записывает файл. На HTML-странице <img src="result.png" alt="Результат обработки"> показывает его, если файл размещён в доступном каталоге сайта. PHP-путь на диске и URL в браузере — разные адреса; для веб-ответа напрямую нужен отдельный обработчик и Content-Type. imagepng объясняет оба варианта. В примерах, где итог назван иначе ($avatar, $large), передайте именно эту переменную.
Теперь применим операцию к целой карточке. Сначала код создаёт небольшой узнаваемый макет и сохраняет оригинал. Корпус — заполненный прямоугольник, ручка — эллипс, подпись — встроенный шрифт. Эти вызовы уже разобраны в imagefilledrectangle, imageellipse и imagestring. Блок после сохранения исходника выполняет текущую операцию; последняя запись создаёт файл результата.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
// Учебный исходник карточки: в проекте его можно загрузить из PNG/JPEG.
$image = imagecreatetruecolor(160, 120);
$background = imagecolorallocate($image, 242, 238, 224);
imagefill($image, 0, 0, $background);
$blue = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 25, 45, 55);
imagefilledrectangle($image, 40, 20, 112, 84, $blue);
imageellipse($image, 112, 50, 36, 42, $blue);
imagestring($image, 3, 12, 99, "CUP / 1290 RUB", $ink);
imagepng($image, "product-source.png");
$result = imagescale($image, 80);
imagepng($result, "product-result.png");
echo "product-source.png -> product-result.png\n";
echo getimagesize("product-result.png")["mime"], "\n";
Текстовая проверка результата
product-source.png -> product-result.png
image/png
Карточка 160×120 стала 80×60. Заголовок, ручка и корпус уменьшились вместе; видны и польза масштаба, и предел читаемости мелкого текста. На настоящем сайте подпись цены часто лучше оставить HTML-текстом рядом с картинкой. В браузере разместите рядом <img src="product-source.png" alt="Исходная карточка"> и <img src="product-result.png" alt="Обработанная карточка">. Текстовый вывод подтверждает файлы; сами различия смотрите на изображениях.
Связанные операции: imagecopyresampled, imagesetinterpolation.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagerotateПовернуть изображение после чтения ориентации камеры или наклонить штамп.
PHP 8: GdImage · gd
imagerotate(GdImage $image, float $angle, int $background_color): GdImage|falseПовернуть изображение после чтения ориентации камеры или наклонить штамп.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| angle, background_color | Угол float в градусах против часовой стрелки, центр вращения — центр картинки; background_color заполняет открывшиеся углы. |
| Возврат / версии | Новый GdImage либо false, габариты могут увеличиться. Ранее неиспользуемый ignore_transparent удалён в 8.3. Alpha результата сохраняйте отдельно. EXIF orientation не применяется автоматически: зеркальные ориентации требуют ещё flip. |
Фотография или скан лежит боком: нужно повернуть содержимое, сохранив узнаваемые детали.
В $rotated = imagerotate($image, 90, 0) угол 90 отсчитывается против часовой стрелки;0 — упакованный чёрный цвет открывшихся углов. В примере 90° углы не открываются. Для другого фона подготовьте цвет через imagecolorallocate. Результат — другой объект в $rotated.
- Исходник: найдите цветной участок или край
- Вызов: проследите координаты и размер выбранной области
- Результат: сравните положение, размеры и цвет; число в выводе только подтверждает проверку
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$background = imagecolorallocate($image, 238, 238, 238);
imagefill($image, 0, 0, $background);
$red = imagecolorallocate($image, 220, 60, 50);
$blue = imagecolorallocate($image, 20, 110, 190);
imagefilledrectangle($image, 1, 1, 4, 3, $red);
imagefilledrectangle($image, 4, 3, 6, 4, $blue);
imagesetpixel($image, 1, 2, $blue);
$rotated = imagerotate($image, 90, 0);
echo imagesx($rotated), "x", imagesy($rotated), "\n";
Текстовая проверка результата
6x8
Красный участок и синяя отметка помогают проследить поворот, а не только смену размеров: верхняя левая часть переходит вниз влево при повороте против часовой стрелки. Направление противоположно углам imagearc.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$background = imagecolorallocate($image, 238, 238, 238);
imagefill($image, 0, 0, $background);
$red = imagecolorallocate($image, 220, 60, 50);
$blue = imagecolorallocate($image, 20, 110, 190);
imagefilledrectangle($image, 1, 1, 4, 3, $red);
imagefilledrectangle($image, 4, 3, 6, 4, $blue);
imagesetpixel($image, 1, 2, $blue);
$rotated = imagerotate($image, 360, 0);
echo imagesx($rotated), "x", imagesy($rotated), "\n";
Текстовая проверка результата
8x6
После 360° цветные участки возвращаются на исходные места: это наглядный контроль полного оборота. Для произвольного угла выбирайте цвет углов и допустимые новые размеры до кодирования.
Следующий шаг: Исправить ориентацию; для EXIF отдельно определить угол и необходимость отражения. Для сохранения нужен объект с итоговыми пикселями, а не возвращённый флаг успеха.
Например, imagepng($rotated, "result.png") записывает файл. На HTML-странице <img src="result.png" alt="Результат обработки"> показывает его, если файл размещён в доступном каталоге сайта. PHP-путь на диске и URL в браузере — разные адреса; для веб-ответа напрямую нужен отдельный обработчик и Content-Type. imagepng объясняет оба варианта. В примерах, где итог назван иначе ($avatar, $large), передайте именно эту переменную.
Теперь применим операцию к целой карточке. Сначала код создаёт небольшой узнаваемый макет и сохраняет оригинал. Корпус — заполненный прямоугольник, ручка — эллипс, подпись — встроенный шрифт. Эти вызовы уже разобраны в imagefilledrectangle, imageellipse и imagestring. Блок после сохранения исходника выполняет текущую операцию; последняя запись создаёт файл результата.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
// Учебный исходник карточки: в проекте его можно загрузить из PNG/JPEG.
$image = imagecreatetruecolor(160, 120);
$background = imagecolorallocate($image, 242, 238, 224);
imagefill($image, 0, 0, $background);
$blue = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 25, 45, 55);
imagefilledrectangle($image, 40, 20, 112, 84, $blue);
imageellipse($image, 112, 50, 36, 42, $blue);
imagestring($image, 3, 12, 99, "CUP / 1290 RUB", $ink);
imagepng($image, "product-source.png");
$background = imagecolorallocate($image, 242, 238, 224);
$result = imagerotate($image, 15, $background);
imagepng($result, "product-result.png");
echo "product-source.png -> product-result.png\n";
echo getimagesize("product-result.png")["mime"], "\n";
Текстовая проверка результата
product-source.png -> product-result.png
image/png
Карточка повернулась против часовой стрелки на 15°. Теперь холст больше, а новые углы заполнены выбранным светлым цветом. Для каталога такой поворот обычно не нужен; он полезен для иллюстраций и демонстрирует выбор фона. Исправление EXIF-ориентации — отдельная задача с известным углом. В браузере разместите рядом <img src="product-source.png" alt="Исходная карточка"> и <img src="product-result.png" alt="Обработанная карточка">. Текстовый вывод подтверждает файлы; сами различия смотрите на изображениях.
Связанные операции: imageflip, imagesetinterpolation.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imageflipЗеркально отразить скан, карточку или исправить зеркальную EXIF-ориентацию.
PHP 8: GdImage · gd
imageflip(GdImage $image, int $mode): trueЗеркально отразить скан, карточку или исправить зеркальную EXIF-ориентацию.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| mode | IMG_FLIP_HORIZONTAL — слева/справа; VERTICAL — сверху/снизу; BOTH — обе оси. Это не 90°поворот. |
| Возврат | true, изменяет тот же объект. Неизвестный режим вызывает ValueError. |
Скан или фотография зеркальные: нужно поменять местами левую и правую стороны, сохранив размер.
imageflip($image, IMG_FLIP_HORIZONTAL) меняет сам $image. Здесь не нужна переменная $flipped для картинки: возвращается true, а изображение остаётся в $image. Для x=0 и ширины 4 новая координата равна 3.
- Исходник: найдите цветной участок или край
- Вызов: проследите координаты и размер выбранной области
- Результат: сравните положение, размеры и цвет; число в выводе только подтверждает проверку
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(4, 2);
$red = imagecolorallocate($image, 255, 0, 0);
imagesetpixel($image, 0, 0, $red);
imageflip($image, IMG_FLIP_HORIZONTAL);
$pixel = imagecolorsforindex($image, imagecolorat($image, 3, 0));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Ширина 4 значит новая координата width−1−oldX=3.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(4, 2);
$red = imagecolorallocate($image, 255, 0, 0);
imagesetpixel($image, 0, 0, $red);
imageflip($image, IMG_FLIP_BOTH);
$pixel = imagecolorsforindex($image, imagecolorat($image, 3, 1));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
255,0,0
Источник меняется, поэтому для отдельного варианта сначала нужна копия.
Следующий шаг: Исправить зеркальную ориентацию перед поворотом и созданием превью. Для сохранения нужен объект с итоговыми пикселями, а не возвращённый флаг успеха.
Например, imagepng($image, "result.png") записывает файл. На HTML-странице <img src="result.png" alt="Результат обработки"> показывает его, если файл размещён в доступном каталоге сайта. PHP-путь на диске и URL в браузере — разные адреса; для веб-ответа напрямую нужен отдельный обработчик и Content-Type. imagepng объясняет оба варианта. В примерах, где итог назван иначе ($avatar, $large), передайте именно эту переменную.
Теперь применим операцию к целой карточке. Сначала код создаёт небольшой узнаваемый макет и сохраняет оригинал. Корпус — заполненный прямоугольник, ручка — эллипс, подпись — встроенный шрифт. Эти вызовы уже разобраны в imagefilledrectangle, imageellipse и imagestring. Блок после сохранения исходника выполняет текущую операцию; последняя запись создаёт файл результата.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
// Учебный исходник карточки: в проекте его можно загрузить из PNG/JPEG.
$image = imagecreatetruecolor(160, 120);
$background = imagecolorallocate($image, 242, 238, 224);
imagefill($image, 0, 0, $background);
$blue = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 25, 45, 55);
imagefilledrectangle($image, 40, 20, 112, 84, $blue);
imageellipse($image, 112, 50, 36, 42, $blue);
imagestring($image, 3, 12, 99, "CUP / 1290 RUB", $ink);
imagepng($image, "product-source.png");
imageflip($image, IMG_FLIP_HORIZONTAL);
imagepng($image, "product-result.png");
echo "product-source.png -> product-result.png\n";
echo getimagesize("product-result.png")["mime"], "\n";
Текстовая проверка результата
product-source.png -> product-result.png
image/png
Ручка чашки переехала влево, но надпись тоже стала зеркальной. Это важная граница: исправляйте ориентацию исходной фотографии до добавления подписей и логотипов. Функция не понимает, где текст, а где предмет. В браузере разместите рядом <img src="product-source.png" alt="Исходная карточка"> и <img src="product-result.png" alt="Обработанная карточка">. Текстовый вывод подтверждает файлы; сами различия смотрите на изображениях.
Связанные операции: imagerotate, imagecopy.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagesetinterpolationВыбрать и проверить алгоритм пересчёта пикселей для rotate/affine и совместимых операций.
PHP 8: GdImage · gd
imagesetinterpolation(GdImage $image, int $method = 3): boolВыбрать и проверить алгоритм пересчёта пикселей для rotate/affine и совместимых операций.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| method | У setter метод интерполяции, default IMG_BILINEAR_FIXED; полный перечень IMG_* ядер в константах. getter не принимает method и возвращает int текущего режима. |
| Возврат | setter bool, getter int. Не все операции поддерживают все ядра; imagescale имеет собственный аргумент mode. Параметр не улучшает уже обработанный результат. |
Один алгоритм подходит пиксельной схеме, другой — фотографии. Настройку выбирают перед преобразованием.
imagesetinterpolation($image, IMG_NEAREST_NEIGHBOUR) меняет настройку объекта, но ещё не рисует новое изображение. Эффект появляется только при поддерживающей настройку операции, например imagerotate. У imagescale есть собственный аргумент mode.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
imagesetinterpolation($image, IMG_NEAREST_NEIGHBOUR);
var_dump(imagegetinterpolation($image) === IMG_NEAREST_NEIGHBOUR);
Ожидаемый результат
bool(true)
Константу сравниваем с константой, не с магическим числом.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
imagesetinterpolation($image, IMG_NEAREST_NEIGHBOUR);
imagesetinterpolation($image, IMG_BILINEAR_FIXED);
var_dump(imagegetinterpolation($image) === IMG_BILINEAR_FIXED);
Ожидаемый результат
bool(true)
Режим — состояние конкретного исходного GdImage.
Следующий шаг: Сначала задать режим, затем получить повернутую или аффинно преобразованную картинку. Для сохранения нужен объект с итоговыми пикселями, а не возвращённый флаг успеха.
Теперь применим операцию к целой карточке. Сначала код создаёт небольшой узнаваемый макет и сохраняет оригинал. Корпус — заполненный прямоугольник, ручка — эллипс, подпись — встроенный шрифт. Эти вызовы уже разобраны в imagefilledrectangle, imageellipse и imagestring. Блок после сохранения исходника выполняет текущую операцию; последняя запись создаёт файл результата.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
// Учебный исходник карточки: в проекте его можно загрузить из PNG/JPEG.
$image = imagecreatetruecolor(160, 120);
$background = imagecolorallocate($image, 242, 238, 224);
imagefill($image, 0, 0, $background);
$blue = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 25, 45, 55);
imagefilledrectangle($image, 40, 20, 112, 84, $blue);
imageellipse($image, 112, 50, 36, 42, $blue);
imagestring($image, 3, 12, 99, "CUP / 1290 RUB", $ink);
imagepng($image, "product-source.png");
imagesetinterpolation($image, IMG_NEAREST_NEIGHBOUR);
$result = imagerotate($image, 15, $background);
imagepng($result, "product-result.png");
echo "product-source.png -> product-result.png\n";
echo getimagesize("product-result.png")["mime"], "\n";
Текстовая проверка результата
product-source.png -> product-result.png
image/png
Setter только выбирает режим, а картинку создаёт следующая строка imagerotate. Ближайший сосед сохраняет жёсткие пиксели и даёт ступеньки на наклонных краях; это иногда нужно схемам, но редко фотографиям. Для сравнения замените константу на IMG_BILINEAR_FIXED, сохранив угол и исходник. В браузере разместите рядом <img src="product-source.png" alt="Исходная карточка"> и <img src="product-result.png" alt="Обработанная карточка">. Текстовый вывод подтверждает файлы; сами различия смотрите на изображениях.
Связанные операции: imagescale, imagerotate, imageaffine.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagegetinterpolationВыбрать и проверить алгоритм пересчёта пикселей для rotate/affine и совместимых операций.
PHP 8: GdImage · gd
imagegetinterpolation(GdImage $image): intВыбрать и проверить алгоритм пересчёта пикселей для rotate/affine и совместимых операций.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| method | У setter метод интерполяции, default IMG_BILINEAR_FIXED; полный перечень IMG_* ядер в константах. getter не принимает method и возвращает int текущего режима. |
| Возврат | setter bool, getter int. Не все операции поддерживают все ядра; imagescale имеет собственный аргумент mode. Параметр не улучшает уже обработанный результат. |
Нужно проверить, какой режим использует объект перед преобразованием, например при поиске причины размытых пикселей.
imagegetinterpolation($image) возвращает номер-константу настройки, а не GdImage. Сравните его с IMG_NEAREST_NEIGHBOUR или другим именем. Сам вызов ничего не масштабирует.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
imagesetinterpolation($image, IMG_NEAREST_NEIGHBOUR);
var_dump(imagegetinterpolation($image) === IMG_NEAREST_NEIGHBOUR);
Ожидаемый результат
bool(true)
Константу сравниваем с константой, не с магическим числом.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
imagesetinterpolation($image, IMG_NEAREST_NEIGHBOUR);
imagesetinterpolation($image, IMG_BILINEAR_FIXED);
var_dump(imagegetinterpolation($image) === IMG_BILINEAR_FIXED);
Ожидаемый результат
bool(true)
Режим — состояние конкретного исходного GdImage.
Следующий шаг: Проверить настройку до rotate/affine и при необходимости изменить её setter-функцией. Для сохранения нужен объект с итоговыми пикселями, а не возвращённый флаг успеха.
Теперь применим операцию к целой карточке. Сначала код создаёт небольшой узнаваемый макет и сохраняет оригинал. Корпус — заполненный прямоугольник, ручка — эллипс, подпись — встроенный шрифт. Эти вызовы уже разобраны в imagefilledrectangle, imageellipse и imagestring. Блок после сохранения исходника выполняет текущую операцию; последняя запись создаёт файл результата.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
// Учебный исходник карточки: в проекте его можно загрузить из PNG/JPEG.
$image = imagecreatetruecolor(160, 120);
$background = imagecolorallocate($image, 242, 238, 224);
imagefill($image, 0, 0, $background);
$blue = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 25, 45, 55);
imagefilledrectangle($image, 40, 20, 112, 84, $blue);
imageellipse($image, 112, 50, 36, 42, $blue);
imagestring($image, 3, 12, 99, "CUP / 1290 RUB", $ink);
imagepng($image, "product-source.png");
imagesetinterpolation($image, IMG_NEAREST_NEIGHBOUR);
$method = imagegetinterpolation($image);
if ($method !== IMG_NEAREST_NEIGHBOUR) { throw new RuntimeException("Unexpected interpolation"); }
$result = imagerotate($image, 15, $background);
imagepng($result, "product-result.png");
echo "product-source.png -> product-result.png\n";
echo getimagesize("product-result.png")["mime"], "\n";
Текстовая проверка результата
product-source.png -> product-result.png
image/png
В $method находится число-константа, в $result — изображение после поворота. Проверка подходит для контролируемого конвейера, где следующий шаг должен использовать именно выбранный режим. Она не доказывает качество фотографии: для этого смотрят на края, детали и подходящий алгоритм. В браузере разместите рядом <img src="product-source.png" alt="Исходная карточка"> и <img src="product-result.png" alt="Обработанная карточка">. Текстовый вывод подтверждает файлы; сами различия смотрите на изображениях.
Связанные операции: imagescale, imagerotate, imageaffine.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imageaffinematrixgetПостроить преобразование наклейки: перенос, масштаб, поворот или сдвиг формы.
PHP 8: GdImage · gd
imageaffinematrixget(int $type, $options): array|falseПостроить преобразование наклейки: перенос, масштаб, поворот или сдвиг формы.
| Параметры и результат | Как понимать и применять |
|---|---|
| type | IMG_AFFINE_TRANSLATE/SCALE требуют options=["x"=>float,"y"=>float]; ROTATE/SHEAR_HORIZONTAL/SHEAR_VERTICAL требуют float угла в градусах. |
| Возврат | array из 6float с индексами 0..5 либо false. Коэффициенты a, b, c, d, e, f означают x′=a×x+c×y+e; y′=b×x+d×y+f. Неверный тип/options отклоняются; проверяйте их до вычисления. |
Наклейку требуется одновременно сдвинуть и увеличить. Матрица хранит правило движения любой её точки.
IMG_AFFINE_SCALE с options["x" => 2.0, "y" => 3.0] даёт коэффициенты масштаба. В переменной $m находится массив из 6 чисел, не изображение. Для точки 4,2 расчёт даёт 8,6; чтобы применить правило к пикселям, нужен отдельный imageaffine.
<?php
declare(strict_types=1);
$m = imageaffinematrixget(IMG_AFFINE_TRANSLATE, ["x" => 5.0, "y" => 3.0]);
echo implode(",", $m), "\n";
Ожидаемый результат
1,0,0,1,5,3
Первые 4 коэффициента оставляют форму, последние 2 сдвигают координаты.
<?php
declare(strict_types=1);
$m = imageaffinematrixget(IMG_AFFINE_SCALE, ["x" => 2.0, "y" => 3.0]);
$x = 4; $y = 2;
echo $m[0] * $x + $m[2] * $y + $m[4], ",", $m[1] * $x + $m[3] * $y + $m[5], "\n";
Ожидаемый результат
8,6
Это арифметика координат; изображение создаёт отдельный imageaffine.
Следующий шаг: Подготовить правило, объединить его с другим, затем один раз пересчитать растр. Для сохранения нужен объект с итоговыми пикселями, а не возвращённый флаг успеха.
Теперь применим операцию к целой карточке. Сначала код создаёт небольшой узнаваемый макет и сохраняет оригинал. Корпус — заполненный прямоугольник, ручка — эллипс, подпись — встроенный шрифт. Эти вызовы уже разобраны в imagefilledrectangle, imageellipse и imagestring. Блок после сохранения исходника выполняет текущую операцию; последняя запись создаёт файл результата.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
// Учебный исходник карточки: в проекте его можно загрузить из PNG/JPEG.
$image = imagecreatetruecolor(160, 120);
$background = imagecolorallocate($image, 242, 238, 224);
imagefill($image, 0, 0, $background);
$blue = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 25, 45, 55);
imagefilledrectangle($image, 40, 20, 112, 84, $blue);
imageellipse($image, 112, 50, 36, 42, $blue);
imagestring($image, 3, 12, 99, "CUP / 1290 RUB", $ink);
imagepng($image, "product-source.png");
$matrix = imageaffinematrixget(IMG_AFFINE_SHEAR_HORIZONTAL, 15.0);
$result = imageaffine($image, $matrix);
imagepng($result, "product-result.png");
echo "product-source.png -> product-result.png\n";
echo getimagesize("product-result.png")["mime"], "\n";
Текстовая проверка результата
product-source.png -> product-result.png
image/png
Первая строка готовит шесть коэффициентов сдвига формы, вторая применяет их к пикселям. Сохранение одного массива $matrix не создаёт PNG: в imagepng передаётся $result. По наклонённым боковым сторонам видно, чем это отличается от обычного поворота. В браузере разместите рядом <img src="product-source.png" alt="Исходная карточка"> и <img src="product-result.png" alt="Обработанная карточка">. Текстовый вывод подтверждает файлы; сами различия смотрите на изображениях.
Связанные операции: imageaffinematrixconcat, imageaffine.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imageaffinematrixconcatОбъединить несколько преобразований перед однократным пересчётом картинки.
PHP 8: GdImage · gd
imageaffinematrixconcat(array $matrix1, array $matrix2): array|falseОбъединить несколько преобразований перед однократным пересчётом картинки.
| Параметры и результат | Как понимать и применять |
|---|---|
| matrix1, matrix2 | Два массива 0..5 с шестью коэффициентами. Порядок важен: перенос и масштаб не взаимозаменяемы; сверяйте нужную точку по формуле. |
| Возврат | Новая матрица array либо false. Само изображение не меняется; объединение уменьшает число повторных интерполяций и потерю резкости. |
Несколько преобразований нужно собрать в одну операцию, чтобы не пересчитывать и не размывать изображение после каждого шага.
imageaffinematrixconcat($a, $b) возвращает новую матрицу. Два масштаба 2 и 3 дают 6; это специальный простой случай. Порядок переноса и масштаба в общем случае меняет результат, поэтому сверяйте движение конкретной точки.
<?php
declare(strict_types=1);
$a = imageaffinematrixget(IMG_AFFINE_TRANSLATE, ["x" => 2.0, "y" => 1.0]);
$b = imageaffinematrixget(IMG_AFFINE_TRANSLATE, ["x" => 3.0, "y" => 4.0]);
echo implode(",", imageaffinematrixconcat($a, $b)), "\n";
Ожидаемый результат
1,0,0,1,5,5
Два переноса удобны для первого опыта: итоговые сдвиги складываются.
<?php
declare(strict_types=1);
$a = imageaffinematrixget(IMG_AFFINE_SCALE, ["x" => 2.0, "y" => 2.0]);
$b = imageaffinematrixget(IMG_AFFINE_SCALE, ["x" => 3.0, "y" => 3.0]);
echo implode(",", imageaffinematrixconcat($a, $b)), "\n";
Ожидаемый результат
6,0,0,6,0,0
При повороте/переносе проверяйте порядок отдельно; такие простые примеры не доказывают коммутативность общего случая.
Следующий шаг: Передать объединённую матрицу imageaffine, затем сохранить возвращённый GdImage. Для сохранения нужен объект с итоговыми пикселями, а не возвращённый флаг успеха.
Теперь применим операцию к целой карточке. Сначала код создаёт небольшой узнаваемый макет и сохраняет оригинал. Корпус — заполненный прямоугольник, ручка — эллипс, подпись — встроенный шрифт. Эти вызовы уже разобраны в imagefilledrectangle, imageellipse и imagestring. Блок после сохранения исходника выполняет текущую операцию; последняя запись создаёт файл результата.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
// Учебный исходник карточки: в проекте его можно загрузить из PNG/JPEG.
$image = imagecreatetruecolor(160, 120);
$background = imagecolorallocate($image, 242, 238, 224);
imagefill($image, 0, 0, $background);
$blue = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 25, 45, 55);
imagefilledrectangle($image, 40, 20, 112, 84, $blue);
imageellipse($image, 112, 50, 36, 42, $blue);
imagestring($image, 3, 12, 99, "CUP / 1290 RUB", $ink);
imagepng($image, "product-source.png");
$scale = imageaffinematrixget(IMG_AFFINE_SCALE, ["x" => 1.25, "y" => 1.25]);
$turn = imageaffinematrixget(IMG_AFFINE_ROTATE, 10.0);
$matrix = imageaffinematrixconcat($scale, $turn);
$result = imageaffine($image, $matrix);
imagepng($result, "product-result.png");
echo "product-source.png -> product-result.png\n";
echo getimagesize("product-result.png")["mime"], "\n";
Текстовая проверка результата
product-source.png -> product-result.png
image/png
Две матрицы описывают увеличение и поворот; concat объединяет правила, а единственный imageaffine пересчитывает пиксели. В этой задаче масштаб равномерный, поэтому такой пример не доказывает взаимозаменяемость любого порядка. При переносах и неравных масштабах проверяйте конкретную точку формулой из карточки. В браузере разместите рядом <img src="product-source.png" alt="Исходная карточка"> и <img src="product-result.png" alt="Обработанная карточка">. Текстовый вывод подтверждает файлы; сами различия смотрите на изображениях.
Связанные операции: imageaffinematrixget, imageaffine.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
Разбор порядка: масштаб и перенос дают (13,7) или (18,10). Этот пример показывает случай, в котором перестановка действительно меняет результат.
imageaffineПолучить растровый результат общей матрицы, например наклонённую этикетку для макета.
PHP 8: GdImage · gd
imageaffine(GdImage $image, array $affine, ?array $clip = null): GdImage|falseПолучить растровый результат общей матрицы, например наклонённую этикетку для макета.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| affine, clip | affine —6 чисел с ключами 0..5. clip=null или массив x, y, width, height исходной области. Не путайте clip с imagesetclip, которое меняет состояние исходника. |
| Возврат / документация | Новый GdImage либо false. Официальная страница краткая; правила матрицы связываем с libgd и проверяем на известных точках. Вырожденная матрица и большие размеры требуют предварительной проверки. |
Этикетку надо наклонить, растянуть или совместить несколько преобразований: одной ширины и угла уже недостаточно.
В $result = imageaffine($image, [1.0, 0.0, 0.0, 1.0, 0.0, 0.0]) шесть чисел описывают правило для координат. Это единичная матрица — без задуманного сдвига/масштаба. Новый объект находится в $result; фактические размеры зависят от расчёта границы GD и отдельно проверяются ниже.
- Исходник: найдите цветной участок или край
- Вызов: проследите координаты и размер выбранной области
- Результат: сравните положение, размеры и цвет; число в выводе только подтверждает проверку
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$background = imagecolorallocate($image, 238, 238, 238);
imagefill($image, 0, 0, $background);
$red = imagecolorallocate($image, 220, 60, 50);
$blue = imagecolorallocate($image, 20, 110, 190);
imagefilledrectangle($image, 1, 1, 4, 3, $red);
imagefilledrectangle($image, 4, 3, 6, 4, $blue);
imagesetpixel($image, 1, 2, $blue);
$result = imageaffine($image, [1.0, 0.0, 0.0, 1.0, 0.0, 0.0]);
echo imagesx($result), "x", imagesy($result), "\n";
Текстовая проверка результата
7x6
В bundled libgd PHP 8.5.11 этот пример даёт ширину 7 вместо математически ожидаемых 8: граница вычисляется реализацией преобразования. Это ограничение показано явно. Для копии точных размеров используйте imagecopy, для масштаба imagescale; всегда проверяйте фактические габариты affine.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$background = imagecolorallocate($image, 238, 238, 238);
imagefill($image, 0, 0, $background);
$red = imagecolorallocate($image, 220, 60, 50);
$blue = imagecolorallocate($image, 20, 110, 190);
imagefilledrectangle($image, 1, 1, 4, 3, $red);
imagefilledrectangle($image, 4, 3, 6, 4, $blue);
imagesetpixel($image, 1, 2, $blue);
$matrix = imageaffinematrixget(IMG_AFFINE_SCALE, ["x" => 2.0, "y" => 2.0]);
$result = imageaffine($image, $matrix);
echo imagesx($result), "x", imagesy($result), "\n";
Текстовая проверка результата
15x12
В этой сборке affine даёт ширину 15, а не 16 из непрерывной геометрии. Нельзя обещать размер без проверки результата. Простое масштабирование точных размеров делайте через imagescale; affine полезен для комбинаций.
Следующий шаг: Применить рассчитанную матрицу к этикетке; для обычного превью проще imagescale. Для сохранения нужен объект с итоговыми пикселями, а не возвращённый флаг успеха.
Например, imagepng($result, "result.png") записывает файл. На HTML-странице <img src="result.png" alt="Результат обработки"> показывает его, если файл размещён в доступном каталоге сайта. PHP-путь на диске и URL в браузере — разные адреса; для веб-ответа напрямую нужен отдельный обработчик и Content-Type. imagepng объясняет оба варианта. В примерах, где итог назван иначе ($avatar, $large), передайте именно эту переменную.
Теперь применим операцию к целой карточке. Сначала код создаёт небольшой узнаваемый макет и сохраняет оригинал. Корпус — заполненный прямоугольник, ручка — эллипс, подпись — встроенный шрифт. Эти вызовы уже разобраны в imagefilledrectangle, imageellipse и imagestring. Блок после сохранения исходника выполняет текущую операцию; последняя запись создаёт файл результата.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
// Учебный исходник карточки: в проекте его можно загрузить из PNG/JPEG.
$image = imagecreatetruecolor(160, 120);
$background = imagecolorallocate($image, 242, 238, 224);
imagefill($image, 0, 0, $background);
$blue = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 25, 45, 55);
imagefilledrectangle($image, 40, 20, 112, 84, $blue);
imageellipse($image, 112, 50, 36, 42, $blue);
imagestring($image, 3, 12, 99, "CUP / 1290 RUB", $ink);
imagepng($image, "product-source.png");
$matrix = imageaffinematrixget(IMG_AFFINE_SHEAR_HORIZONTAL, 15.0);
$result = imageaffine($image, $matrix);
imagepng($result, "product-result.png");
echo "product-source.png -> product-result.png\n";
echo getimagesize("product-result.png")["mime"], "\n";
Текстовая проверка результата
product-source.png -> product-result.png
image/png
При сдвиге формы строки смещаются относительно друг друга: вертикальные стороны наклоняются, а горизонтальные остаются горизонтальными. Сравните это с imagerotate, где поворачивается вся система осей. Проверяйте реальные размеры и поля результата; GD не обещает идеальную геометрическую границу. В браузере разместите рядом <img src="product-source.png" alt="Исходная карточка"> и <img src="product-result.png" alt="Обработанная карточка">. Текстовый вывод подтверждает файлы; сами различия смотрите на изображениях.
Связанные операции: imageaffinematrixget, imageaffinematrixconcat, imagesetinterpolation.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagegammacorrectИсправить известное различие гаммы источника и назначения, а не произвольно поднять яркость.
PHP 8: GdImage · gd
imagegammacorrect(GdImage $image, float $input_gamma, float $output_gamma): trueИсправить известное различие гаммы источника и назначения, а не произвольно поднять яркость.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| input_gamma, output_gamma | Положительные float. Отношение гамм меняет нелинейное распределение яркости; ноль/отрицательные недопустимы. |
| Возврат | true, изменяет изображение. Это не полноценное управление ICC-профилями и не автоматическое исправление цвета камеры. |
Известно, что источник и устройство вывода используют разную гамму: требуется перераспределить яркости, а не просто прибавить число к каждому каналу.
imagegammacorrect($image, 1.0, 2.2) меняет тот же объект; числа задают входную и выходную гамму. Средние тёмные уровни в этом примере светлеют. Не угадывайте гамму произвольной фотографии: это не универсальная кнопка улучшения.
- Исходник: найдите цветной участок или край
- Вызов: проследите координаты и размер выбранной области
- Результат: сравните положение, размеры и цвет; число в выводе только подтверждает проверку
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$gray = imagecolorallocate($image, 100, 100, 100);
imagefill($image, 0, 0, $gray);
imagegammacorrect($image, 1.0, 1.0);
$pixel = imagecolorsforindex($image, imagecolorat($image, 0, 0));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
100,100,100
Так проверяется нейтральный случай до подбора рабочего преобразования.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
imagefill($image, 0, 0, imagecolorallocate($image, 64, 64, 64));
imagegammacorrect($image, 1.0, 2.2);
$level = imagecolorsforindex($image, imagecolorat($image, 0, 0))["red"];
echo $level > 64 ? "lighter\n" : "not lighter\n";
Текстовая проверка результата
lighter
Проверяется направление эффекта, а не байтовая идентичность разных библиотек.
Следующий шаг: Сделать контролируемое преобразование производной при известных характеристиках источника. Для сохранения нужен объект с итоговыми пикселями, а не возвращённый флаг успеха.
Например, imagepng($image, "result.png") записывает файл. На HTML-странице <img src="result.png" alt="Результат обработки"> показывает его, если файл размещён в доступном каталоге сайта. PHP-путь на диске и URL в браузере — разные адреса; для веб-ответа напрямую нужен отдельный обработчик и Content-Type. imagepng объясняет оба варианта. В примерах, где итог назван иначе ($avatar, $large), передайте именно эту переменную.
Теперь применим операцию к целой карточке. Сначала код создаёт небольшой узнаваемый макет и сохраняет оригинал. Корпус — заполненный прямоугольник, ручка — эллипс, подпись — встроенный шрифт. Эти вызовы уже разобраны в imagefilledrectangle, imageellipse и imagestring. Блок после сохранения исходника выполняет текущую операцию; последняя запись создаёт файл результата.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
// Учебный исходник карточки: в проекте его можно загрузить из PNG/JPEG.
$image = imagecreatetruecolor(160, 120);
$background = imagecolorallocate($image, 242, 238, 224);
imagefill($image, 0, 0, $background);
$blue = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 25, 45, 55);
imagefilledrectangle($image, 40, 20, 112, 84, $blue);
imageellipse($image, 112, 50, 36, 42, $blue);
imagestring($image, 3, 12, 99, "CUP / 1290 RUB", $ink);
imagepng($image, "product-source.png");
imagegammacorrect($image, 1.0, 2.2);
imagepng($image, "product-result.png");
echo "product-source.png -> product-result.png\n";
echo getimagesize("product-result.png")["mime"], "\n";
Текстовая проверка результата
product-source.png -> product-result.png
image/png
Синий корпус и тёмная надпись светлеют нелинейно, а почти белый фон меняется меньше. Для этого учебного макета гаммы заданы явно. В рабочем процессе сначала выясните реальные характеристики источника; не применять 1.0→2.2 автоматически ко всем загрузкам. В браузере разместите рядом <img src="product-source.png" alt="Исходная карточка"> и <img src="product-result.png" alt="Обработанная карточка">. Текстовый вывод подтверждает файлы; сами различия смотрите на изображениях.
Связанные операции: imagefilter.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imageconvolutionПрименить небольшое ядро резкости, размытия или выделения границ.
PHP 8: GdImage · gd
imageconvolution(GdImage $image, array $matrix, float $divisor, float $offset): boolПрименить небольшое ядро резкости, размытия или выделения границ.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| matrix | Массив 3×3float: каждый выходной цвет зависит от соседей и этих весов. |
| divisor, offset | Сумма делится на ненулевой divisor, затем прибавляется offset. Для среднего девяти пикселей divisor9; для резкости часто 1. Ограничение компонентов 0..255 сохраняется. |
| Возврат | bool; неправильная размерность вызывает ValueError. Проход по всем пикселям стоит времени и дополнительной памяти; не повторяйте фильтр без необходимости. |
Резкую границу значка нужно смягчить: новый пиксель должен учитывать соседей, а не только своё исходное значение.
Матрица 3×3 задаёт веса девяти соседей. Девять единиц и divisor9 дают среднее; offset0 ничего к нему не прибавляет. Функция изменяет $image. В примере белая половина даёт соседним чёрным пикселям часть своей яркости.
- Исходник: найдите цветной участок или край
- Вызов: проследите координаты и размер выбранной области
- Результат: сравните положение, размеры и цвет; число в выводе только подтверждает проверку
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
imagefill($image, 0, 0, imagecolorallocate($image, 20, 40, 60));
imageconvolution($image, [[0,0,0], [0,1,0], [0,0,0]], 1.0, 0.0);
$pixel = imagecolorsforindex($image, imagecolorat($image, 2, 2));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
20,40,60
Единица в центре берёт исходный пиксель, нули не берут соседей.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefilledrectangle($image, 4, 0, 7, 5, $white);
imageconvolution($image, [[1,1,1], [1,1,1], [1,1,1]], 9.0, 0.0);
$pixel = imagecolorsforindex($image, imagecolorat($image, 3, 2));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
$pixel = imagecolorsforindex($image, imagecolorat($image, 4, 2));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
85,85,85
170,170,170
До обработки слева чёрный, справа белый: граница проходит между x=3 и x=4. В окне 3×3 для x=3 три белых соседа дают 255×3/9=85; для x=4 шесть белых дают 170. На картинке появляются две серые полосы вместо резкого перехода. Однотонные участки дальше от границы сохраняются.
Следующий шаг: Подобрать ядро размытия/резкости и применить к отдельной производной изображения. Для сохранения нужен объект с итоговыми пикселями, а не возвращённый флаг успеха.
Например, imagepng($image, "result.png") записывает файл. На HTML-странице <img src="result.png" alt="Результат обработки"> показывает его, если файл размещён в доступном каталоге сайта. PHP-путь на диске и URL в браузере — разные адреса; для веб-ответа напрямую нужен отдельный обработчик и Content-Type. imagepng объясняет оба варианта. В примерах, где итог назван иначе ($avatar, $large), передайте именно эту переменную.
Теперь применим операцию к целой карточке. Сначала код создаёт небольшой узнаваемый макет и сохраняет оригинал. Корпус — заполненный прямоугольник, ручка — эллипс, подпись — встроенный шрифт. Эти вызовы уже разобраны в imagefilledrectangle, imageellipse и imagestring. Блок после сохранения исходника выполняет текущую операцию; последняя запись создаёт файл результата.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
// Учебный исходник карточки: в проекте его можно загрузить из PNG/JPEG.
$image = imagecreatetruecolor(160, 120);
$background = imagecolorallocate($image, 242, 238, 224);
imagefill($image, 0, 0, $background);
$blue = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 25, 45, 55);
imagefilledrectangle($image, 40, 20, 112, 84, $blue);
imageellipse($image, 112, 50, 36, 42, $blue);
imagestring($image, 3, 12, 99, "CUP / 1290 RUB", $ink);
imagepng($image, "product-source.png");
imageconvolution($image, [[1,1,1], [1,1,1], [1,1,1]], 9.0, 0.0);
imagepng($image, "product-result.png");
echo "product-source.png -> product-result.png\n";
echo getimagesize("product-result.png")["mime"], "\n";
Текстовая проверка результата
product-source.png -> product-result.png
image/png
Внутри однотонного синего корпуса почти ничего не меняется. На границе корпуса и фона появляются смешанные пиксели; мелкая подпись теряет резкость. Это объясняет, почему размытие нельзя считать универсальным улучшением качества. В браузере разместите рядом <img src="product-source.png" alt="Исходная карточка"> и <img src="product-result.png" alt="Обработанная карточка">. Текстовый вывод подтверждает файлы; сами различия смотрите на изображениях.
Связанные операции: imagefilter, imagecopyresampled.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagefilterПрименить готовый эффект к превью, например обесцветить недоступный товар.
PHP 8: GdImage · gd
imagefilter(GdImage $image, int $filter, ...$args): boolПрименить готовый эффект к превью, например обесцветить недоступный товар.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| filter, args | Константа определяет количество/смысл variadic args. Не передавайте одинаковый набор параметров всем фильтрам. |
| Возврат | bool, меняет исходник. Для варианта сохраните отдельную копию. Фильтры не заменяют валидацию входа; scatter случайный и не даёт стабильных пикселей. |
Недоступный товар можно показать серым, а подготовленное превью сделать немного светлее: это изменение содержимого картинки.
imagefilter($image, IMG_FILTER_BRIGHTNESS, 15) меняет $image и прибавляет 15 к RGB-компонентам. У NEGATE дополнительных чисел нет, у других фильтров они имеют иной смысл. true подтверждает операцию, но показывать нужно изменённый $image.
- Исходник: найдите цветной участок или край
- Вызов: проследите координаты и размер выбранной области
- Результат: сравните положение, размеры и цвет; число в выводе только подтверждает проверку
| Фильтр | Параметры и смысл |
|---|---|
| IMG_FILTER_NEGATE | Без параметров: обратить RGB. |
| IMG_FILTER_GRAYSCALE | Без параметров: серый по взвешенной REC.601 яркости; alpha сохраняется. Палитра ограничивает результат. |
| IMG_FILTER_BRIGHTNESS | Одно число−255..255: добавить яркость. |
| IMG_FILTER_CONTRAST | Одно число изменения контраста; подбирайте визуально, стандартный диапазон−100..100, положительный уменьшает контраст. |
| IMG_FILTER_COLORIZE | red, green, blue0..255 и optional alpha0..127 задают цветовой сдвиг. |
| IMG_FILTER_EDGEDETECT | Без аргументов: границы. |
| IMG_FILTER_EMBOSS | Без аргументов: рельеф. |
| IMG_FILTER_GAUSSIAN_BLUR | Без аргументов: Gaussian размытие. |
| IMG_FILTER_SELECTIVE_BLUR | Без аргументов: выборочное размытие. |
| IMG_FILTER_MEAN_REMOVAL | Без аргументов: подчёркнутые детали/эскиз. |
| IMG_FILTER_SMOOTH | Одно число степени сглаживания. |
| IMG_FILTER_PIXELATE | Размер блока в пикселях и optional bool advanced=false. |
| IMG_FILTER_SCATTER | sub, plus задают случайное смещение, sub< plus; optional массив цветов ограничивает применение. В 8.4+переполнение вызывает ValueError. |
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
imagefill($image, 0, 0, imagecolorallocate($image, 255, 0, 0));
imagefilter($image, IMG_FILTER_NEGATE);
$pixel = imagecolorsforindex($image, imagecolorat($image, 0, 0));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
0,255,255
Каждая компонента превращается в 255−исходная.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
imagefill($image, 0, 0, imagecolorallocate($image, 20, 40, 60));
imagefilter($image, IMG_FILTER_BRIGHTNESS, 15);
$pixel = imagecolorsforindex($image, imagecolorat($image, 0, 0));
echo $pixel["red"], ",", $pixel["green"], ",", $pixel["blue"], "\n";
Текстовая проверка результата
35,55,75
Более светлые компоненты могут упереться в 255 и потерять детали. Изменение обычно применяют к производной, сохраняя оригинал.
Следующий шаг: Сохранить отдельный вариант для состояния интерфейса, не затронув оригинал товара. Для сохранения нужен объект с итоговыми пикселями, а не возвращённый флаг успеха.
Например, imagepng($image, "result.png") записывает файл. На HTML-странице <img src="result.png" alt="Результат обработки"> показывает его, если файл размещён в доступном каталоге сайта. PHP-путь на диске и URL в браузере — разные адреса; для веб-ответа напрямую нужен отдельный обработчик и Content-Type. imagepng объясняет оба варианта. В примерах, где итог назван иначе ($avatar, $large), передайте именно эту переменную.
Теперь применим операцию к целой карточке. Сначала код создаёт небольшой узнаваемый макет и сохраняет оригинал. Корпус — заполненный прямоугольник, ручка — эллипс, подпись — встроенный шрифт. Эти вызовы уже разобраны в imagefilledrectangle, imageellipse и imagestring. Блок после сохранения исходника выполняет текущую операцию; последняя запись создаёт файл результата.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
// Учебный исходник карточки: в проекте его можно загрузить из PNG/JPEG.
$image = imagecreatetruecolor(160, 120);
$background = imagecolorallocate($image, 242, 238, 224);
imagefill($image, 0, 0, $background);
$blue = imagecolorallocate($image, 30, 110, 180);
$ink = imagecolorallocate($image, 25, 45, 55);
imagefilledrectangle($image, 40, 20, 112, 84, $blue);
imageellipse($image, 112, 50, 36, 42, $blue);
imagestring($image, 3, 12, 99, "CUP / 1290 RUB", $ink);
imagepng($image, "product-source.png");
imagefilter($image, IMG_FILTER_GRAYSCALE);
imagepng($image, "product-result.png");
echo "product-source.png -> product-result.png\n";
echo getimagesize("product-result.png")["mime"], "\n";
Текстовая проверка результата
product-source.png -> product-result.png
image/png
Контуры и подпись остаются на месте, синий корпус превращается в серый. Оригинал сохранён отдельно, поэтому при возвращении товара в наличие не потребуется восстанавливать цвета. На сайте статус дополнительно нужно написать текстом: один цвет недоступен части читателей. В браузере разместите рядом <img src="product-source.png" alt="Исходная карточка"> и <img src="product-result.png" alt="Обработанная карточка">. Текстовый вывод подтверждает файлы; сами различия смотрите на изображениях.
Связанные операции: imageconvolution, imagegammacorrect.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagepngЗакодировать готовый холст в PNG для файла или HTTP-ответа.
PHP 8: GdImage · gd
imagepng(GdImage $image, $file = null, int $quality = -1, int $filters = -1): boolЗакодировать готовый холст в PNG для файла или HTTP-ответа.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| file / filename | Путь либо null/пропуск для вывода бинарного потока; доступен открытый stream resource, который согласно API может закрыться после вызова: не продолжайте писать в него без проверки. |
| Настройки | Сжатие quality −1(default zlib) либо 0..9; оно без потерь, это не качество JPEG. filters −1 отключён/default, PNG_FILTER_* маска, PNG_NO_FILTER/ALL_FILTERS; system libgd игнорирует filters. PHP8.4+неверный quality вызывает ValueError. |
| Результат / граница | bool успеха, но manual предупреждает: некоторые отказы libgd всё равно возвращают true. Проверяйте фактический файл/длину и декодирование. Не допускайте warning/HTML/пробелов перед бинарным HTTP-ответом. |
| Когда выбрать | Сохраняет full alpha при imagesavealpha; palette и truecolor возможны. |
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagepng($image, "picture.png", 6);
$info = getimagesize("picture.png");
echo $info[0], "x", $info[1], " ", $info["mime"], "\n";
Текстовая проверка результата
8x6 image/png
На белом фоне чёрный прямоугольник и красная точка: по ним видно, что сохранил выбранный формат. У WBMP/XBM остаётся только чёрный рисунок: красная точка не является заданным foreground и превращается в фон. JPEG/WebP/AVIF могут изменить цвета крошечных деталей из-за потерь. Файл доступен рядом с результатом. Не подставляйте непроверенное имя посетителя в путь.
Скачать PNG
Скачать исходные байтыИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
ob_start();
imagepng($image, null, 6);
$bytes = ob_get_clean();
echo strlen($bytes) > 0 ? "encoded\n" : "empty\n";
Текстовая проверка результата
encoded
ob_start временно собирает вывод кодека в строку; return функции не содержит изображение. Для HTTP заранее задайте правильный Content-Type и завершите ответ без HTML.
Связанные операции: imagecreatefrompng, imagetypes, imagesavealpha.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecreatefrompngОткрыть PNG как редактируемые пиксели: затем можно вырезать, уменьшить или подписать.
PHP 8: GdImage · gd
imagecreatefrompng(string $filename): GdImage|falseОткрыть PNG как редактируемые пиксели: затем можно вырезать, уменьшить или подписать.
| Параметры и результат | Как понимать и применять |
|---|---|
| filename | Путь к файлу нужного формата. URL допустим только при разрешённых wrappers; в сервисе сначала отдельно скачайте разрешённый ресурс с лимитами, не принимайте произвольный URL. |
| Возврат | GdImage либо false; недоступный/битый файл обычно даёт предупреждение. Распакованный размер может быть во много раз больше файла; сначала лимиты байтов/сторон/пикселей. |
| Ограничения | Сохраняет full alpha при imagesavealpha; palette и truecolor возможны. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagepng($image, "picture.png", 6);
$loaded = imagecreatefrompng("picture.png");
echo imagesx($loaded), "x", imagesy($loaded), "\n";
Текстовая проверка результата
8x6
Сначала создаётся и сохраняется маленький опознавательный рисунок; затем декодер возвращает его пиксели в $loaded. Сравните положение чёрного прямоугольника и точки. В своём проекте оставьте строку чтения и передайте путь к реальному файлу нужного формата; подготовительный рисунок не требуется.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagepng($image, "picture.png", 6);
$loaded = imagecreatefrompng("picture.png");
$small = imagescale($loaded, 4);
imagepng($small, "thumb.png");
$info = getimagesize("thumb.png");
echo $info[0], "x", $info[1], "\n";
Текстовая проверка результата
4x3
Сравните исходник 8 × 6 и превью 4 × 3: вся схема уменьшена, поэтому одиночная точка может потерять контраст. Декодер читает, imagescale пересчитывает пиксели, imagepng записывает новый формат. Переименование .jpg в .png этих действий не выполняет. Для PNG/WebP с alpha дополнительно сохраните настройки прозрачности на новом холсте.
Связанные операции: imagepng, getimagesize, imagescale.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagejpegЗакодировать готовый холст в JPEG для файла или HTTP-ответа.
PHP 8: GdImage · gd
imagejpeg(GdImage $image, $file = null, int $quality = -1): boolЗакодировать готовый холст в JPEG для файла или HTTP-ответа.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| file / filename | Путь либо null/пропуск для вывода бинарного потока; доступен открытый stream resource, который согласно API может закрыться после вызова: не продолжайте писать в него без проверки. |
| Настройки | quality −1 выбирает библиотечный default,0..100 задаёт баланс потерь/размера. Чем выше, тем обычно больше файл. PHP8.4+неверный quality даёт ValueError. |
| Результат / граница | bool успеха, но manual предупреждает: некоторые отказы libgd всё равно возвращают true. Проверяйте фактический файл/длину и декодирование. Не допускайте warning/HTML/пробелов перед бинарным HTTP-ответом. |
| Когда выбрать | Нет alpha; перед конверсией прозрачного PNG явно наложите выбранный фон. EXIF-ориентация/ICC/IPTC не сохраняются автоматически. |
Скачать PNG
Скачать JPEGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagejpeg($image, "picture.jpeg", 85);
$info = getimagesize("picture.jpeg");
echo $info[0], "x", $info[1], " ", $info["mime"], "\n";
Текстовая проверка результата
8x6 image/jpeg
На белом фоне чёрный прямоугольник и красная точка: по ним видно, что сохранил выбранный формат. У WBMP/XBM остаётся только чёрный рисунок: красная точка не является заданным foreground и превращается в фон. JPEG/WebP/AVIF могут изменить цвета крошечных деталей из-за потерь. Файл доступен рядом с результатом. Не подставляйте непроверенное имя посетителя в путь.
Скачать PNG
Скачать исходные байтыИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
ob_start();
imagejpeg($image);
$bytes = ob_get_clean();
echo strlen($bytes) > 0 ? "encoded\n" : "empty\n";
Текстовая проверка результата
encoded
ob_start временно собирает вывод кодека в строку; return функции не содержит изображение. Для HTTP заранее задайте правильный Content-Type и завершите ответ без HTML.
Связанные операции: imagecreatefromjpeg, imagetypes, imagesavealpha.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecreatefromjpegОткрыть JPEG как редактируемые пиксели: затем можно вырезать, уменьшить или подписать.
PHP 8: GdImage · gd
imagecreatefromjpeg(string $filename): GdImage|falseОткрыть JPEG как редактируемые пиксели: затем можно вырезать, уменьшить или подписать.
| Параметры и результат | Как понимать и применять |
|---|---|
| filename | Путь к файлу нужного формата. URL допустим только при разрешённых wrappers; в сервисе сначала отдельно скачайте разрешённый ресурс с лимитами, не принимайте произвольный URL. |
| Возврат | GdImage либо false; недоступный/битый файл обычно даёт предупреждение. Распакованный размер может быть во много раз больше файла; сначала лимиты байтов/сторон/пикселей. |
| Ограничения | Нет alpha; перед конверсией прозрачного PNG явно наложите выбранный фон. EXIF-ориентация/ICC/IPTC не сохраняются автоматически. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagejpeg($image, "picture.jpeg", 85);
$loaded = imagecreatefromjpeg("picture.jpeg");
echo imagesx($loaded), "x", imagesy($loaded), "\n";
Текстовая проверка результата
8x6
Сначала создаётся и сохраняется маленький опознавательный рисунок; затем декодер возвращает его пиксели в $loaded. Сравните положение чёрного прямоугольника и точки. В своём проекте оставьте строку чтения и передайте путь к реальному файлу нужного формата; подготовительный рисунок не требуется.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagejpeg($image, "picture.jpeg", 85);
$loaded = imagecreatefromjpeg("picture.jpeg");
$small = imagescale($loaded, 4);
imagepng($small, "thumb.png");
$info = getimagesize("thumb.png");
echo $info[0], "x", $info[1], "\n";
Текстовая проверка результата
4x3
Сравните исходник 8 × 6 и превью 4 × 3: вся схема уменьшена, поэтому одиночная точка может потерять контраст. Декодер читает, imagescale пересчитывает пиксели, imagepng записывает новый формат. Переименование .jpg в .png этих действий не выполняет. Для PNG/WebP с alpha дополнительно сохраните настройки прозрачности на новом холсте.
Связанные операции: imagejpeg, getimagesize, imagescale.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagegifЗакодировать готовый холст в GIF для файла или HTTP-ответа.
PHP 8: GdImage · gd
imagegif(GdImage $image, $file = null): boolЗакодировать готовый холст в GIF для файла или HTTP-ответа.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| file / filename | Путь либо null/пропуск для вывода бинарного потока; доступен открытый stream resource, который согласно API может закрыться после вызова: не продолжайте писать в него без проверки. |
| Настройки | Нет quality; формат палитровый с одним прозрачным цветом. |
| Результат / граница | bool успеха, но manual предупреждает: некоторые отказы libgd всё равно возвращают true. Проверяйте фактический файл/длину и декодирование. Не допускайте warning/HTML/пробелов перед бинарным HTTP-ответом. |
| Когда выбрать | Чтение возвращает только первый кадр, его размеры могут отличаться от logical screen в getimagesize. GD не сохраняет анимацию. |
Скачать PNG
Скачать GIFИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagegif($image, "picture.gif");
$info = getimagesize("picture.gif");
echo $info[0], "x", $info[1], " ", $info["mime"], "\n";
Текстовая проверка результата
8x6 image/gif
На белом фоне чёрный прямоугольник и красная точка: по ним видно, что сохранил выбранный формат. У WBMP/XBM остаётся только чёрный рисунок: красная точка не является заданным foreground и превращается в фон. JPEG/WebP/AVIF могут изменить цвета крошечных деталей из-за потерь. Файл доступен рядом с результатом. Не подставляйте непроверенное имя посетителя в путь.
Скачать PNG
Скачать исходные байтыИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
ob_start();
imagegif($image);
$bytes = ob_get_clean();
echo strlen($bytes) > 0 ? "encoded\n" : "empty\n";
Текстовая проверка результата
encoded
ob_start временно собирает вывод кодека в строку; return функции не содержит изображение. Для HTTP заранее задайте правильный Content-Type и завершите ответ без HTML.
Связанные операции: imagecreatefromgif, imagetypes, imagesavealpha.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecreatefromgifОткрыть GIF как редактируемые пиксели: затем можно вырезать, уменьшить или подписать.
PHP 8: GdImage · gd
imagecreatefromgif(string $filename): GdImage|falseОткрыть GIF как редактируемые пиксели: затем можно вырезать, уменьшить или подписать.
| Параметры и результат | Как понимать и применять |
|---|---|
| filename | Путь к файлу нужного формата. URL допустим только при разрешённых wrappers; в сервисе сначала отдельно скачайте разрешённый ресурс с лимитами, не принимайте произвольный URL. |
| Возврат | GdImage либо false; недоступный/битый файл обычно даёт предупреждение. Распакованный размер может быть во много раз больше файла; сначала лимиты байтов/сторон/пикселей. |
| Ограничения | Чтение возвращает только первый кадр, его размеры могут отличаться от logical screen в getimagesize. GD не сохраняет анимацию. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagegif($image, "picture.gif");
$loaded = imagecreatefromgif("picture.gif");
echo imagesx($loaded), "x", imagesy($loaded), "\n";
Текстовая проверка результата
8x6
Сначала создаётся и сохраняется маленький опознавательный рисунок; затем декодер возвращает его пиксели в $loaded. Сравните положение чёрного прямоугольника и точки. В своём проекте оставьте строку чтения и передайте путь к реальному файлу нужного формата; подготовительный рисунок не требуется.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagegif($image, "picture.gif");
$loaded = imagecreatefromgif("picture.gif");
$small = imagescale($loaded, 4);
imagepng($small, "thumb.png");
$info = getimagesize("thumb.png");
echo $info[0], "x", $info[1], "\n";
Текстовая проверка результата
4x3
Сравните исходник 8 × 6 и превью 4 × 3: вся схема уменьшена, поэтому одиночная точка может потерять контраст. Декодер читает, imagescale пересчитывает пиксели, imagepng записывает новый формат. Переименование .jpg в .png этих действий не выполняет. Для PNG/WebP с alpha дополнительно сохраните настройки прозрачности на новом холсте.
Связанные операции: imagegif, getimagesize, imagescale.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagebmpЗакодировать готовый холст в BMP для файла или HTTP-ответа.
PHP 8: GdImage · gd
imagebmp(GdImage $image, $file = null, bool $compressed = true): boolЗакодировать готовый холст в BMP для файла или HTTP-ответа.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| file / filename | Путь либо null/пропуск для вывода бинарного потока; доступен открытый stream resource, который согласно API может закрыться после вызова: не продолжайте писать в него без проверки. |
| Настройки | compressed=true(default) просит RLE, false без сжатия; применимость зависит от вида BMP/палитры. При null явно передавайте compressed; старые версии имели оговорки для null. |
| Результат / граница | bool успеха, но manual предупреждает: некоторые отказы libgd всё равно возвращают true. Проверяйте фактический файл/длину и декодирование. Не допускайте warning/HTML/пробелов перед бинарным HTTP-ответом. |
| Когда выбрать | Для обмена проверяйте поддержку BMP у получателя; файлы часто заметно больше PNG. |
Скачать PNG
Скачать BMPИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagebmp($image, "picture.bmp", false);
$info = getimagesize("picture.bmp");
echo $info[0], "x", $info[1], " ", $info["mime"], "\n";
Текстовая проверка результата
8x6 image/bmp
На белом фоне чёрный прямоугольник и красная точка: по ним видно, что сохранил выбранный формат. У WBMP/XBM остаётся только чёрный рисунок: красная точка не является заданным foreground и превращается в фон. JPEG/WebP/AVIF могут изменить цвета крошечных деталей из-за потерь. Файл доступен рядом с результатом. Не подставляйте непроверенное имя посетителя в путь.
Скачать PNG
Скачать исходные байтыИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
ob_start();
imagebmp($image, null, false);
$bytes = ob_get_clean();
echo strlen($bytes) > 0 ? "encoded\n" : "empty\n";
Текстовая проверка результата
encoded
ob_start временно собирает вывод кодека в строку; return функции не содержит изображение. Для HTTP заранее задайте правильный Content-Type и завершите ответ без HTML.
Связанные операции: imagecreatefrombmp, imagetypes, imagesavealpha.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecreatefrombmpОткрыть BMP как редактируемые пиксели: затем можно вырезать, уменьшить или подписать.
PHP 8: GdImage · gd
imagecreatefrombmp(string $filename): GdImage|falseОткрыть BMP как редактируемые пиксели: затем можно вырезать, уменьшить или подписать.
| Параметры и результат | Как понимать и применять |
|---|---|
| filename | Путь к файлу нужного формата. URL допустим только при разрешённых wrappers; в сервисе сначала отдельно скачайте разрешённый ресурс с лимитами, не принимайте произвольный URL. |
| Возврат | GdImage либо false; недоступный/битый файл обычно даёт предупреждение. Распакованный размер может быть во много раз больше файла; сначала лимиты байтов/сторон/пикселей. |
| Ограничения | Для обмена проверяйте поддержку BMP у получателя; файлы часто заметно больше PNG. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagebmp($image, "picture.bmp", false);
$loaded = imagecreatefrombmp("picture.bmp");
echo imagesx($loaded), "x", imagesy($loaded), "\n";
Текстовая проверка результата
8x6
Сначала создаётся и сохраняется маленький опознавательный рисунок; затем декодер возвращает его пиксели в $loaded. Сравните положение чёрного прямоугольника и точки. В своём проекте оставьте строку чтения и передайте путь к реальному файлу нужного формата; подготовительный рисунок не требуется.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagebmp($image, "picture.bmp", false);
$loaded = imagecreatefrombmp("picture.bmp");
$small = imagescale($loaded, 4);
imagepng($small, "thumb.png");
$info = getimagesize("thumb.png");
echo $info[0], "x", $info[1], "\n";
Текстовая проверка результата
4x3
Сравните исходник 8 × 6 и превью 4 × 3: вся схема уменьшена, поэтому одиночная точка может потерять контраст. Декодер читает, imagescale пересчитывает пиксели, imagepng записывает новый формат. Переименование .jpg в .png этих действий не выполняет. Для PNG/WebP с alpha дополнительно сохраните настройки прозрачности на новом холсте.
Связанные операции: imagebmp, getimagesize, imagescale.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagewebpЗакодировать готовый холст в WebP для файла или HTTP-ответа.
PHP 8: GdImage · gd
imagewebp(GdImage $image, $file = null, int $quality = -1): boolЗакодировать готовый холст в WebP для файла или HTTP-ответа.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| file / filename | Путь либо null/пропуск для вывода бинарного потока; доступен открытый stream resource, который согласно API может закрыться после вызова: не продолжайте писать в него без проверки. |
| Настройки | quality −1 означает 80;0..100 lossy. IMG_WEBP_LOSSLESS включает lossless (PHP8.1+при подходящей libwebp). PHP8.4+неверный quality даёт ValueError. |
| Результат / граница | bool успеха, но manual предупреждает: некоторые отказы libgd всё равно возвращают true. Проверяйте фактический файл/длину и декодирование. Не допускайте warning/HTML/пробелов перед бинарным HTTP-ответом. |
| Когда выбрать | Анимированный WebP декодер GD не читает. Для полноцветной записи нужен truecolor; alpha поддерживается. |
Скачать PNG
Скачать WEBPИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagewebp($image, "picture.webp", 80);
$info = getimagesize("picture.webp");
echo $info[0], "x", $info[1], " ", $info["mime"], "\n";
Текстовая проверка результата
8x6 image/webp
На белом фоне чёрный прямоугольник и красная точка: по ним видно, что сохранил выбранный формат. У WBMP/XBM остаётся только чёрный рисунок: красная точка не является заданным foreground и превращается в фон. JPEG/WebP/AVIF могут изменить цвета крошечных деталей из-за потерь. Файл доступен рядом с результатом. Не подставляйте непроверенное имя посетителя в путь.
Скачать PNG
Скачать исходные байтыИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
ob_start();
imagewebp($image);
$bytes = ob_get_clean();
echo strlen($bytes) > 0 ? "encoded\n" : "empty\n";
Текстовая проверка результата
encoded
ob_start временно собирает вывод кодека в строку; return функции не содержит изображение. Для HTTP заранее задайте правильный Content-Type и завершите ответ без HTML.
Связанные операции: imagecreatefromwebp, imagetypes, imagesavealpha.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecreatefromwebpОткрыть WebP как редактируемые пиксели: затем можно вырезать, уменьшить или подписать.
PHP 8: GdImage · gd
imagecreatefromwebp(string $filename): GdImage|falseОткрыть WebP как редактируемые пиксели: затем можно вырезать, уменьшить или подписать.
| Параметры и результат | Как понимать и применять |
|---|---|
| filename | Путь к файлу нужного формата. URL допустим только при разрешённых wrappers; в сервисе сначала отдельно скачайте разрешённый ресурс с лимитами, не принимайте произвольный URL. |
| Возврат | GdImage либо false; недоступный/битый файл обычно даёт предупреждение. Распакованный размер может быть во много раз больше файла; сначала лимиты байтов/сторон/пикселей. |
| Ограничения | Анимированный WebP декодер GD не читает. Для полноцветной записи нужен truecolor; alpha поддерживается. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagewebp($image, "picture.webp", 80);
$loaded = imagecreatefromwebp("picture.webp");
echo imagesx($loaded), "x", imagesy($loaded), "\n";
Текстовая проверка результата
8x6
Сначала создаётся и сохраняется маленький опознавательный рисунок; затем декодер возвращает его пиксели в $loaded. Сравните положение чёрного прямоугольника и точки. В своём проекте оставьте строку чтения и передайте путь к реальному файлу нужного формата; подготовительный рисунок не требуется.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagewebp($image, "picture.webp", 80);
$loaded = imagecreatefromwebp("picture.webp");
$small = imagescale($loaded, 4);
imagepng($small, "thumb.png");
$info = getimagesize("thumb.png");
echo $info[0], "x", $info[1], "\n";
Текстовая проверка результата
4x3
Сравните исходник 8 × 6 и превью 4 × 3: вся схема уменьшена, поэтому одиночная точка может потерять контраст. Декодер читает, imagescale пересчитывает пиксели, imagepng записывает новый формат. Переименование .jpg в .png этих действий не выполняет. Для PNG/WebP с alpha дополнительно сохраните настройки прозрачности на новом холсте.
Связанные операции: imagewebp, getimagesize, imagescale.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imageavifЗакодировать готовый холст в AVIF для файла или HTTP-ответа.
PHP 8: GdImage · gd
imageavif(GdImage $image, $file = null, int $quality = -1, int $speed = -1): boolЗакодировать готовый холст в AVIF для файла или HTTP-ответа.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| file / filename | Путь либо null/пропуск для вывода бинарного потока; доступен открытый stream resource, который согласно API может закрыться после вызова: не продолжайте писать в него без проверки. |
| Настройки | quality −1 означает 52,0..100; speed −1 означает 6,0..10: меньше обычно медленнее/компактнее. PHP8.4+неверные значения дают ValueError. |
| Результат / граница | bool успеха, но manual предупреждает: некоторые отказы libgd всё равно возвращают true. Проверяйте фактический файл/длину и декодирование. Не допускайте warning/HTML/пробелов перед бинарным HTTP-ответом. |
| Когда выбрать | PHP8.1+, нужен AVIF-enabled libgd/libavif. Кодирование может быть существенно дороже JPEG; готовые превью кешируют. |
Скачать PNG
Скачать AVIFИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imageavif($image, "picture.avif", 52, 6);
$info = getimagesize("picture.avif");
echo $info[0], "x", $info[1], " ", $info["mime"], "\n";
Текстовая проверка результата
8x6 image/avif
На белом фоне чёрный прямоугольник и красная точка: по ним видно, что сохранил выбранный формат. У WBMP/XBM остаётся только чёрный рисунок: красная точка не является заданным foreground и превращается в фон. JPEG/WebP/AVIF могут изменить цвета крошечных деталей из-за потерь. Файл доступен рядом с результатом. Не подставляйте непроверенное имя посетителя в путь.
Скачать PNG
Скачать исходные байтыИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
ob_start();
imageavif($image);
$bytes = ob_get_clean();
echo strlen($bytes) > 0 ? "encoded\n" : "empty\n";
Текстовая проверка результата
encoded
ob_start временно собирает вывод кодека в строку; return функции не содержит изображение. Для HTTP заранее задайте правильный Content-Type и завершите ответ без HTML.
Связанные операции: imagecreatefromavif, imagetypes, imagesavealpha.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecreatefromavifОткрыть AVIF как редактируемые пиксели: затем можно вырезать, уменьшить или подписать.
PHP 8: GdImage · gd
imagecreatefromavif(string $filename): GdImage|falseОткрыть AVIF как редактируемые пиксели: затем можно вырезать, уменьшить или подписать.
| Параметры и результат | Как понимать и применять |
|---|---|
| filename | Путь к файлу нужного формата. URL допустим только при разрешённых wrappers; в сервисе сначала отдельно скачайте разрешённый ресурс с лимитами, не принимайте произвольный URL. |
| Возврат | GdImage либо false; недоступный/битый файл обычно даёт предупреждение. Распакованный размер может быть во много раз больше файла; сначала лимиты байтов/сторон/пикселей. |
| Ограничения | PHP8.1+, нужен AVIF-enabled libgd/libavif. Кодирование может быть существенно дороже JPEG; готовые превью кешируют. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imageavif($image, "picture.avif", 52, 6);
$loaded = imagecreatefromavif("picture.avif");
echo imagesx($loaded), "x", imagesy($loaded), "\n";
Текстовая проверка результата
8x6
Сначала создаётся и сохраняется маленький опознавательный рисунок; затем декодер возвращает его пиксели в $loaded. Сравните положение чёрного прямоугольника и точки. В своём проекте оставьте строку чтения и передайте путь к реальному файлу нужного формата; подготовительный рисунок не требуется.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imageavif($image, "picture.avif", 52, 6);
$loaded = imagecreatefromavif("picture.avif");
$small = imagescale($loaded, 4);
imagepng($small, "thumb.png");
$info = getimagesize("thumb.png");
echo $info[0], "x", $info[1], "\n";
Текстовая проверка результата
4x3
Сравните исходник 8 × 6 и превью 4 × 3: вся схема уменьшена, поэтому одиночная точка может потерять контраст. Декодер читает, imagescale пересчитывает пиксели, imagepng записывает новый формат. Переименование .jpg в .png этих действий не выполняет. Для PNG/WebP с alpha дополнительно сохраните настройки прозрачности на новом холсте.
Связанные операции: imageavif, getimagesize, imagescale.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagewbmpЗакодировать готовый холст в WBMP для файла или HTTP-ответа.
PHP 8: GdImage · gd
imagewbmp(GdImage $image, $file = null, ?int $foreground_color = null): boolЗакодировать готовый холст в WBMP для файла или HTTP-ответа.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| file / filename | Путь либо null/пропуск для вывода бинарного потока; доступен открытый stream resource, который согласно API может закрыться после вызова: не продолжайте писать в него без проверки. |
| Настройки | foreground_color=null(default black) либо выделенный цвет; все остальные становятся фоном. |
| Результат / граница | bool успеха, но manual предупреждает: некоторые отказы libgd всё равно возвращают true. Проверяйте фактический файл/длину и декодирование. Не допускайте warning/HTML/пробелов перед бинарным HTTP-ответом. |
| Когда выбрать | Монохромный формат для старых устройств; не сохраняет фотографические цвета. |
Скачать PNG
Скачать WBMPИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagewbmp($image, "picture.wbmp");
$info = getimagesize("picture.wbmp");
echo $info[0], "x", $info[1], " ", $info["mime"], "\n";
Текстовая проверка результата
8x6 image/vnd.wap.wbmp
На белом фоне чёрный прямоугольник и красная точка: по ним видно, что сохранил выбранный формат. У WBMP/XBM остаётся только чёрный рисунок: красная точка не является заданным foreground и превращается в фон. JPEG/WebP/AVIF могут изменить цвета крошечных деталей из-за потерь. Файл доступен рядом с результатом. Не подставляйте непроверенное имя посетителя в путь.
Скачать PNG
Скачать исходные байтыИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
ob_start();
imagewbmp($image);
$bytes = ob_get_clean();
echo strlen($bytes) > 0 ? "encoded\n" : "empty\n";
Текстовая проверка результата
encoded
ob_start временно собирает вывод кодека в строку; return функции не содержит изображение. Для HTTP заранее задайте правильный Content-Type и завершите ответ без HTML.
Связанные операции: imagecreatefromwbmp, imagetypes, imagesavealpha.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecreatefromwbmpОткрыть WBMP как редактируемые пиксели: затем можно вырезать, уменьшить или подписать.
PHP 8: GdImage · gd
imagecreatefromwbmp(string $filename): GdImage|falseОткрыть WBMP как редактируемые пиксели: затем можно вырезать, уменьшить или подписать.
| Параметры и результат | Как понимать и применять |
|---|---|
| filename | Путь к файлу нужного формата. URL допустим только при разрешённых wrappers; в сервисе сначала отдельно скачайте разрешённый ресурс с лимитами, не принимайте произвольный URL. |
| Возврат | GdImage либо false; недоступный/битый файл обычно даёт предупреждение. Распакованный размер может быть во много раз больше файла; сначала лимиты байтов/сторон/пикселей. |
| Ограничения | Монохромный формат для старых устройств; не сохраняет фотографические цвета. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagewbmp($image, "picture.wbmp");
$loaded = imagecreatefromwbmp("picture.wbmp");
echo imagesx($loaded), "x", imagesy($loaded), "\n";
Текстовая проверка результата
8x6
Сначала создаётся и сохраняется маленький опознавательный рисунок; затем декодер возвращает его пиксели в $loaded. Сравните положение чёрного прямоугольника и точки. В своём проекте оставьте строку чтения и передайте путь к реальному файлу нужного формата; подготовительный рисунок не требуется.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagewbmp($image, "picture.wbmp");
$loaded = imagecreatefromwbmp("picture.wbmp");
$small = imagescale($loaded, 4);
imagepng($small, "thumb.png");
$info = getimagesize("thumb.png");
echo $info[0], "x", $info[1], "\n";
Текстовая проверка результата
4x3
Сравните исходник 8 × 6 и превью 4 × 3: вся схема уменьшена, поэтому одиночная точка может потерять контраст. Декодер читает, imagescale пересчитывает пиксели, imagepng записывает новый формат. Переименование .jpg в .png этих действий не выполняет. Для PNG/WebP с alpha дополнительно сохраните настройки прозрачности на новом холсте.
Связанные операции: imagewbmp, getimagesize, imagescale.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagexbmЗакодировать готовый холст в XBM для файла или HTTP-ответа.
PHP 8: GdImage · gd
imagexbm(GdImage $image, ?string $filename, ?int $foreground_color = null): boolЗакодировать готовый холст в XBM для файла или HTTP-ответа.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| file / filename | Путь либо null/пропуск для вывода бинарного потока; XBM принимает путь/null, не ресурс. |
| Настройки | filename обязателен, но null выводит в поток. foreground_color=null(defaultblack); остальные цвета фон. Имя файла участвует в C-идентификаторах, неподходящие символы заменяются _. |
| Результат / граница | bool успеха, но manual предупреждает: некоторые отказы libgd всё равно возвращают true. Проверяйте фактический файл/длину и декодирование. Не допускайте warning/HTML/пробелов перед бинарным HTTP-ответом. |
| Когда выбрать | Текстовый C-bitmap, а не веб-формат фотографии. С 7.0.9 ширина не обязана быть кратной 8; исторический четвёртый аргумент удалён в 8.0. |
Скачать PNG
Скачать XBMИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagexbm($image, "picture.xbm", 0);
$loaded = imagecreatefromxbm("picture.xbm");
echo imagesx($loaded), "x", imagesy($loaded), "\n";
Текстовая проверка результата
8x6
На белом фоне чёрный прямоугольник и красная точка: по ним видно, что сохранил выбранный формат. У WBMP/XBM остаётся только чёрный рисунок: красная точка не является заданным foreground и превращается в фон. JPEG/WebP/AVIF могут изменить цвета крошечных деталей из-за потерь. Файл доступен рядом с результатом. Не подставляйте непроверенное имя посетителя в путь.
Скачать PNG
Скачать исходные байтыИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
ob_start();
imagexbm($image, null, 0);
$bytes = ob_get_clean();
echo strlen($bytes) > 0 ? "encoded\n" : "empty\n";
Текстовая проверка результата
encoded
ob_start временно собирает вывод кодека в строку; return функции не содержит изображение. Для HTTP заранее задайте правильный Content-Type и завершите ответ без HTML.
Связанные операции: imagecreatefromxbm, imagetypes, imagesavealpha.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecreatefromxbmОткрыть XBM как редактируемые пиксели: затем можно вырезать, уменьшить или подписать.
PHP 8: GdImage · gd
imagecreatefromxbm(string $filename): GdImage|falseОткрыть XBM как редактируемые пиксели: затем можно вырезать, уменьшить или подписать.
| Параметры и результат | Как понимать и применять |
|---|---|
| filename | Путь к файлу нужного формата. URL допустим только при разрешённых wrappers; в сервисе сначала отдельно скачайте разрешённый ресурс с лимитами, не принимайте произвольный URL. |
| Возврат | GdImage либо false; недоступный/битый файл обычно даёт предупреждение. Распакованный размер может быть во много раз больше файла; сначала лимиты байтов/сторон/пикселей. |
| Ограничения | Текстовый C-bitmap, а не веб-формат фотографии. С 7.0.9 ширина не обязана быть кратной 8; исторический четвёртый аргумент удалён в 8.0. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagexbm($image, "picture.xbm", 0);
$loaded = imagecreatefromxbm("picture.xbm");
echo imagesx($loaded), "x", imagesy($loaded), "\n";
Текстовая проверка результата
8x6
Сначала создаётся и сохраняется маленький опознавательный рисунок; затем декодер возвращает его пиксели в $loaded. Сравните положение чёрного прямоугольника и точки. В своём проекте оставьте строку чтения и передайте путь к реальному файлу нужного формата; подготовительный рисунок не требуется.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagexbm($image, "picture.xbm", 0);
$loaded = imagecreatefromxbm("picture.xbm");
$small = imagescale($loaded, 4);
imagepng($small, "thumb.png");
$info = getimagesize("thumb.png");
echo $info[0], "x", $info[1], "\n";
Текстовая проверка результата
4x3
Сравните исходник 8 × 6 и превью 4 × 3: вся схема уменьшена, поэтому одиночная точка может потерять контраст. Декодер читает, imagescale пересчитывает пиксели, imagepng записывает новый формат. Переименование .jpg в .png этих действий не выполняет. Для PNG/WebP с alpha дополнительно сохраните настройки прозрачности на новом холсте.
Связанные операции: imagexbm, getimagesize, imagescale.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecreatefromstringОткрыть байты изображения, полученные из БД, API или локального файла без промежуточного сохранения.
PHP 8: GdImage · gd
imagecreatefromstring(string $data): GdImage|falseОткрыть байты изображения, полученные из БД, API или локального файла без промежуточного сохранения.
| Параметры и результат | Как понимать и применять |
|---|---|
| data | Бинарная PHP-строка с самим файлом, не URL, не base64 и не data:-URL. Base64 сначала строго декодируется. Поддержаны JPEG, PNG, GIF, BMP, WBMP, GD2, WebP, AVIF при наличии кодеков. |
| Возврат / ошибки | GdImage либо false при неизвестном/повреждённом формате; E_WARNING при нераспознанных данных. Наличие строки не отменяет лимиты памяти и пикселей. Анимация не становится поддержанной от смены функции. |
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
ob_start(); imagepng($image); $bytes = ob_get_clean();
$loaded = imagecreatefromstring($bytes);
echo imagesx($loaded), "x", imagesy($loaded), "\n";
Текстовая проверка результата
8x6
Вход — содержимое PNG. Переменная с именем файла потребовала бы file_get_contents или imagecreatefrompng.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
ob_start(); imagepng($image); $bytes = ob_get_clean();
$payload = json_encode(["picture" => base64_encode($bytes)], JSON_THROW_ON_ERROR);
$data = json_decode($payload, true, flags: JSON_THROW_ON_ERROR);
$binary = base64_decode($data["picture"], true);
if ($binary === false) { throw new UnexpectedValueException("Invalid base64"); }
$loaded = imagecreatefromstring($binary);
echo imagesx($loaded), "\n";
Текстовая проверка результата
8
Перед этими шагами реальный API ограничивает длину запроса и тип поля. Base64 увеличивает объём примерно на треть и не проверяет безопасность файла.
Связанные операции: getimagesizefromstring, imagecreatefrompng.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
getimagesizeУзнать размеры и тип до полного декодирования: выбрать лимит и зарезервировать место на странице.
PHP 8: GdImage · standard
getimagesize(string $filename, &$image_info = null): array|falseУзнать размеры и тип до полного декодирования: выбрать лимит и зарезервировать место на странице.
| Параметры и результат | Как понимать и применять |
|---|---|
| filename / string | Локальный путь/разрешённый stream для getimagesize; готовые бинарные байты для fromstring. Это функции стандартного расширения, не требуют GD для самого чтения размеров. |
| image_info | Optional параметр по ссылке получает JPG APP-маркеры для JFIF, например APP13 с IPTC. Он не равен основному возвращённому массиву. |
| Возврат | array: [0]width,[1]height,[2]IMAGETYPE_*,[3]строка HTML размеров, mime и иногда bits/channels. RGB обычно 3 канала, CMYK4; отсутствие bits/channels допустимо. false при отказе; размеры 0 возможны для сложных/пустых контейнеров. |
| Особые форматы | GIF — logical screen всего файла, не обязательно первый GD кадр; ICO — вариант с наибольшей глубиной; JP2/JPC — максимальная глубина компонент, первый корневой codestream. AVIF корректные размеры/bits/channels с 8.2. EXIForientation не применяет поворот: видимые стороны могут поменяться местами. |
| Ошибки / доверие | Недоступный путь E_WARNING, ошибка чтения E_NOTICE; пустой filename в 8.0+ValueError. Не использовать как доказательство «безопасного изображения»: нужен Fileinfo, выбранный декодер, лимиты и безопасное хранение. |
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagepng($image, "source.png");
$info = getimagesize("source.png");
echo $info[0], "x", $info[1], " ", $info["mime"], "\n";
Ожидаемый результат
8x6 image/png
Числовой тип IMAGETYPE_* не совпадает с маской IMG_* функции imagetypes.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagepng($image, "source.png");
$info = getimagesize("source.png");
$allowed = $info !== false && $info[0] > 0 && $info[1] > 0
&& $info[0] <= 1000 && $info[1] <= 1000
&& $info[0] * $info[1] <= 500000;
echo $allowed ? "size accepted\n" : "rejected\n";
Ожидаемый результат
size accepted
Это только проверка габаритов. Приём загрузки дополнительно проверяет UPLOAD_ERR, размер байтов, MIME, успешный decode и права доступа.
Связанные операции: imagecreatefromstring, iptcparse.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
getimagesizefromstringУзнать размеры и тип до полного декодирования: выбрать лимит и зарезервировать место на странице.
PHP 8: GdImage · standard
getimagesizefromstring(string $string, &$image_info = null): array|falseУзнать размеры и тип до полного декодирования: выбрать лимит и зарезервировать место на странице.
| Параметры и результат | Как понимать и применять |
|---|---|
| filename / string | Локальный путь/разрешённый stream для getimagesize; готовые бинарные байты для fromstring. Это функции стандартного расширения, не требуют GD для самого чтения размеров. |
| image_info | Optional параметр по ссылке получает JPG APP-маркеры для JFIF, например APP13 с IPTC. Он не равен основному возвращённому массиву. |
| Возврат | array: [0]width,[1]height,[2]IMAGETYPE_*,[3]строка HTML размеров, mime и иногда bits/channels. RGB обычно 3 канала, CMYK4; отсутствие bits/channels допустимо. false при отказе; размеры 0 возможны для сложных/пустых контейнеров. |
| Особые форматы | GIF — logical screen всего файла, не обязательно первый GD кадр; ICO — вариант с наибольшей глубиной; JP2/JPC — максимальная глубина компонент, первый корневой codestream. AVIF корректные размеры/bits/channels с 8.2. EXIForientation не применяет поворот: видимые стороны могут поменяться местами. |
| Ошибки / доверие | Недоступный путь E_WARNING, ошибка чтения E_NOTICE; пустой filename в 8.0+ValueError. Не использовать как доказательство «безопасного изображения»: нужен Fileinfo, выбранный декодер, лимиты и безопасное хранение. |
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagepng($image, "source.png");
$info = getimagesizefromstring(file_get_contents("source.png"));
echo $info[0], "x", $info[1], " ", $info["mime"], "\n";
Ожидаемый результат
8x6 image/png
Числовой тип IMAGETYPE_* не совпадает с маской IMG_* функции imagetypes.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagepng($image, "source.png");
$info = getimagesizefromstring(file_get_contents("source.png"));
$allowed = $info !== false && $info[0] > 0 && $info[1] > 0
&& $info[0] <= 1000 && $info[1] <= 1000
&& $info[0] * $info[1] <= 500000;
echo $allowed ? "size accepted\n" : "rejected\n";
Ожидаемый результат
size accepted
Это только проверка габаритов. Приём загрузки дополнительно проверяет UPLOAD_ERR, размер байтов, MIME, успешный decode и права доступа.
Связанные операции: imagecreatefromstring, iptcparse.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
image_type_to_extensionПолучить расширение имени для уже определённого формата.
PHP 8: GdImage · standard
image_type_to_extension(int $image_type, bool $include_dot = true): string|falseПолучить расширение имени для уже определённого формата.
| Параметры и результат | Как понимать и применять |
|---|---|
| image_type | Одна из IMAGETYPE_* функций getimagesize/exif_imagetype, не IMG_* bitmask. Поддерживаемые типы включают GIF, JPEG, PNG, SWF, PSD, BMP, TIFF, JPC/JP2/JPX/JB2, SWC, IFF, WBMP, XBM, ICO, WebP, AVIF и исторические варианты. |
| include_dot / результат | include_dot=true(default) включает точку, false убирает; строка либо false для неизвестного типа. Некоторые контейнеры имеют близкие расширения, это не функция декодирования. |
<?php
declare(strict_types=1);
echo image_type_to_extension(IMAGETYPE_PNG), "\n";
Ожидаемый результат
.png
Расширение файла не проверяется этой функцией — ей уже передали числовой формат.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagepng($image, "source.bin");
$info = getimagesize("source.bin");
echo "thumbnail.", image_type_to_extension($info[2], false), "\n";
Ожидаемый результат
thumbnail.png
Фактический PNG распознан по данным, хотя исходное имя заканчивалось на.bin.
Связанные операции: getimagesize.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
image_type_to_mime_typeПолучить MIME для HTTP-ответа по известному типу.
PHP 8: GdImage · standard
image_type_to_mime_type(int $image_type): stringПолучить MIME для HTTP-ответа по известному типу.
| Параметры и результат | Как понимать и применять |
|---|---|
| image_type | Одна из IMAGETYPE_* функций getimagesize/exif_imagetype, не IMG_* bitmask. Поддерживаемые типы включают GIF, JPEG, PNG, SWF, PSD, BMP, TIFF, JPC/JP2/JPX/JB2, SWC, IFF, WBMP, XBM, ICO, WebP, AVIF и исторические варианты. |
| include_dot / результат | MIME возвращается строкой, неизвестный тип даёт application/octet-stream. |
<?php
declare(strict_types=1);
echo image_type_to_mime_type(IMAGETYPE_PNG), "\n";
Ожидаемый результат
image/png
Расширение файла не проверяется этой функцией — ей уже передали числовой формат.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagepng($image, "source.bin");
$info = getimagesize("source.bin");
echo image_type_to_mime_type($info[2]), "\n";
Ожидаемый результат
image/png
Фактический PNG распознан по данным, хотя исходное имя заканчивалось на.bin.
Связанные операции: getimagesize.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecreatefromtgaПрочитать растровую TGA-текстуру из графического конвейера.
PHP7.4+ · gd
imagecreatefromtga(string $filename): GdImage|falseПрочитать растровую TGA-текстуру из графического конвейера.
| Параметры и результат | Как понимать и применять |
|---|---|
| filename | Путь к Truevision TGA, доступная с PHP7.4+функция; поддержка чтения зависит от сборки. |
| Возврат | GdImage либо false. GD не предоставляет imageTGA для обратной записи; после обработки выбирайте поддержанный выходной формат. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$header = pack("CCCvvCvvvvCC", 0, 0, 2, 0, 0, 0, 0, 0, 2, 1, 24, 32);
file_put_contents("sample.tga", $header . hex2bin("0000ff00ff00"));
$image = imagecreatefromtga("sample.tga");
echo imagesx($image), "x", imagesy($image), "\n";
Текстовая проверка результата
2x1
18 байт заголовка описывают 2×1truecolor24bit, затем идут два BGR пикселя; это учебный fixture, не необходимость писать TGA вручную в приложении.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$header = pack("CCCvvCvvvvCC", 0, 0, 2, 0, 0, 0, 0, 0, 2, 1, 24, 32);
file_put_contents("sample.tga", $header . hex2bin("0000ff00ff00"));
$image = imagecreatefromtga("sample.tga");
imagepng($image, "texture.png");
echo getimagesize("texture.png")["mime"], "\n";
Текстовая проверка результата
image/png
Такой шаг удобен для просмотра текстуры на сайте.
Связанные операции: imagepng, gd_info.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecreatefromxpmОткрыть текстовый XPM-значок из старого набора графики.
PHP 8: GdImage · gd
imagecreatefromxpm(string $filename): GdImage|falseОткрыть текстовый XPM-значок из старого набора графики.
| Параметры и результат | Как понимать и применять |
|---|---|
| filename | Путь к XPM. Функция требует сборки с XPM; наличие GD само по себе её не гарантирует. |
| Возврат | GdImage либо false; повреждённый/неподдержанный вход отклоняется. Отдельного XPM кодера в GD PHP нет. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatefromxpm("icon.xpm");
echo imagesx($image), "x", imagesy($image), "\n";
Текстовая проверка результата
2x1
Каждая буква строки ab ссылается на запись таблицы цветов — аналог палитры.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatefromxpm("icon.xpm");
imagepng($image, "icon.png");
echo getimagesize("icon.png")["mime"], "\n";
Текстовая проверка результата
image/png
PNG удобнее для текущего веб-интерфейса.
Связанные операции: imagepng, gd_info.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagegdРазобрать старый GD-кеш и выбрать переносимый путь миграции.
PHP 8: GdImage · gd
imagegd(GdImage $image, ?string $file = null): boolРазобрать старый GD-кеш и выбрать переносимый путь миграции.
| Параметры и результат | Как понимать и применять |
|---|---|
| Назначение | Собственные форматы libgd GD/GD2 считаются устаревшими и предназначены только для разработки/тестирования, не для публикации или долговечного обмена. |
| Аргументы | image — GdImage, file/null выбирает файл/вывод; дополнительного качества нет. |
| Возврат | Чтение возвращает GdImage|false; запись bool, при отказе libgd возможен true с пустыми данными. Многие актуальные сборки отключают эти кодеки; function_exists не доказывает поддержку конкретного формата. |
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
$warnings = [];
set_error_handler(static function (int $severity, string $message) use (&$warnings): bool { $warnings[] = $message; return true; });
try {
ob_start();
imagegd($image);
$bytes = ob_get_clean();
} finally { restore_error_handler(); }
echo $bytes === "" && $warnings !== [] ? "codec unavailable in this build\n" : "codec available\n";
Ожидаемый результат
codec available
В этой bundled GD кодек доступен. На другом сервере он может быть отключён. Локальный обработчик фиксирует диагностику только этой проверки.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagegd($image, "cache.gd");
$loaded = imagecreatefromgd("cache.gd");
echo imagesx($loaded), "x", imagesy($loaded), "\n";
Текстовая проверка результата
8x6
Проверено только в сборке с работающим кодеком. GD2 part читает область; для нового долговечного формата предпочтителен PNG.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagepng($image, "cache.png");
$restored = imagecreatefrompng("cache.png");
echo imagesx($restored), "x", imagesy($restored), "\n";
Текстовая проверка результата
8x6
PNG не умеет специальное чтение GD2 чанков, но совместим и сохраняет без потерь. Для очень больших изображений выбирайте специализированный tiled формат/библиотеку.
Связанные операции: imagepng, imagecreatefrompng, imagecrop.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagegd2Разобрать старый GD-кеш и выбрать переносимый путь миграции.
PHP 8: GdImage · gd
imagegd2(GdImage $image, ?string $file = null, int $chunk_size = 128, int $mode = 1): boolРазобрать старый GD-кеш и выбрать переносимый путь миграции.
| Параметры и результат | Как понимать и применять |
|---|---|
| Назначение | Собственные форматы libgd GD/GD2 считаются устаревшими и предназначены только для разработки/тестирования, не для публикации или долговечного обмена. |
| Аргументы | image — GdImage, file/null выбирает файл/вывод; chunk_size=128 задаёт блоки (обычно 64..4096), mode IMG_GD2_RAW либо IMG_GD2_COMPRESSED. |
| Возврат | Чтение возвращает GdImage|false; запись bool, при отказе libgd возможен true с пустыми данными. Многие актуальные сборки отключают эти кодеки; function_exists не доказывает поддержку конкретного формата. |
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
$warnings = [];
set_error_handler(static function (int $severity, string $message) use (&$warnings): bool { $warnings[] = $message; return true; });
try {
ob_start();
imagegd2($image);
$bytes = ob_get_clean();
} finally { restore_error_handler(); }
echo $bytes === "" && $warnings !== [] ? "codec unavailable in this build\n" : "codec available\n";
Ожидаемый результат
codec available
В этой bundled GD кодек доступен. На другом сервере он может быть отключён. Локальный обработчик фиксирует диагностику только этой проверки.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagegd2($image, "cache.gd2", 128, IMG_GD2_COMPRESSED);
$loaded = imagecreatefromgd2("cache.gd2");
echo imagesx($loaded), "x", imagesy($loaded), "\n";
Текстовая проверка результата
8x6
Проверено только в сборке с работающим кодеком. GD2 part читает область; для нового долговечного формата предпочтителен PNG.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagepng($image, "cache.png");
$restored = imagecreatefrompng("cache.png");
echo imagesx($restored), "x", imagesy($restored), "\n";
Текстовая проверка результата
8x6
PNG не умеет специальное чтение GD2 чанков, но совместим и сохраняет без потерь. Для очень больших изображений выбирайте специализированный tiled формат/библиотеку.
Связанные операции: imagepng, imagecreatefrompng, imagecrop.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecreatefromgdРазобрать старый GD-кеш и выбрать переносимый путь миграции.
PHP 8: GdImage · gd
imagecreatefromgd(string $filename): GdImage|falseРазобрать старый GD-кеш и выбрать переносимый путь миграции.
| Параметры и результат | Как понимать и применять |
|---|---|
| Назначение | Собственные форматы libgd GD/GD2 считаются устаревшими и предназначены только для разработки/тестирования, не для публикации или долговечного обмена. |
| Аргументы | filename — путь к GD/GD2; декодируется весь файл. |
| Возврат | Чтение возвращает GdImage|false; запись bool, при отказе libgd возможен true с пустыми данными. Многие актуальные сборки отключают эти кодеки; function_exists не доказывает поддержку конкретного формата. |
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
$warnings = [];
set_error_handler(static function (int $severity, string $message) use (&$warnings): bool { $warnings[] = $message; return true; });
try {
ob_start();
imagegd($image);
$bytes = ob_get_clean();
} finally { restore_error_handler(); }
echo $bytes === "" && $warnings !== [] ? "codec unavailable in this build\n" : "codec available\n";
Ожидаемый результат
codec available
В этой bundled GD кодек доступен. На другом сервере он может быть отключён. Локальный обработчик фиксирует диагностику только этой проверки.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagegd($image, "cache.gd");
$loaded = imagecreatefromgd("cache.gd");
echo imagesx($loaded), "x", imagesy($loaded), "\n";
Текстовая проверка результата
8x6
Проверено только в сборке с работающим кодеком. GD2 part читает область; для нового долговечного формата предпочтителен PNG.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagepng($image, "cache.png");
$restored = imagecreatefrompng("cache.png");
echo imagesx($restored), "x", imagesy($restored), "\n";
Текстовая проверка результата
8x6
PNG не умеет специальное чтение GD2 чанков, но совместим и сохраняет без потерь. Для очень больших изображений выбирайте специализированный tiled формат/библиотеку.
Связанные операции: imagepng, imagecreatefrompng, imagecrop.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecreatefromgd2Разобрать старый GD-кеш и выбрать переносимый путь миграции.
PHP 8: GdImage · gd
imagecreatefromgd2(string $filename): GdImage|falseРазобрать старый GD-кеш и выбрать переносимый путь миграции.
| Параметры и результат | Как понимать и применять |
|---|---|
| Назначение | Собственные форматы libgd GD/GD2 считаются устаревшими и предназначены только для разработки/тестирования, не для публикации или долговечного обмена. |
| Аргументы | filename — путь к GD/GD2; декодируется весь файл. |
| Возврат | Чтение возвращает GdImage|false; запись bool, при отказе libgd возможен true с пустыми данными. Многие актуальные сборки отключают эти кодеки; function_exists не доказывает поддержку конкретного формата. |
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
$warnings = [];
set_error_handler(static function (int $severity, string $message) use (&$warnings): bool { $warnings[] = $message; return true; });
try {
ob_start();
imagegd2($image);
$bytes = ob_get_clean();
} finally { restore_error_handler(); }
echo $bytes === "" && $warnings !== [] ? "codec unavailable in this build\n" : "codec available\n";
Ожидаемый результат
codec available
В этой bundled GD кодек доступен. На другом сервере он может быть отключён. Локальный обработчик фиксирует диагностику только этой проверки.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagegd2($image, "cache.gd2", 128, IMG_GD2_COMPRESSED);
$loaded = imagecreatefromgd2("cache.gd2");
echo imagesx($loaded), "x", imagesy($loaded), "\n";
Текстовая проверка результата
8x6
Проверено только в сборке с работающим кодеком. GD2 part читает область; для нового долговечного формата предпочтителен PNG.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagepng($image, "cache.png");
$restored = imagecreatefrompng("cache.png");
echo imagesx($restored), "x", imagesy($restored), "\n";
Текстовая проверка результата
8x6
PNG не умеет специальное чтение GD2 чанков, но совместим и сохраняет без потерь. Для очень больших изображений выбирайте специализированный tiled формат/библиотеку.
Связанные операции: imagepng, imagecreatefrompng, imagecrop.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecreatefromgd2partРазобрать старый GD-кеш и выбрать переносимый путь миграции.
PHP 8: GdImage · gd
imagecreatefromgd2part(string $filename, int $x, int $y, int $width, int $height): GdImage|falseРазобрать старый GD-кеш и выбрать переносимый путь миграции.
| Параметры и результат | Как понимать и применять |
|---|---|
| Назначение | Собственные форматы libgd GD/GD2 считаются устаревшими и предназначены только для разработки/тестирования, не для публикации или долговечного обмена. |
| Аргументы | filename — путь к GD/GD2; x, y, width, height выделяют исходную область. |
| Возврат | Чтение возвращает GdImage|false; запись bool, при отказе libgd возможен true с пустыми данными. Многие актуальные сборки отключают эти кодеки; function_exists не доказывает поддержку конкретного формата. |
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
$warnings = [];
set_error_handler(static function (int $severity, string $message) use (&$warnings): bool { $warnings[] = $message; return true; });
try {
ob_start();
imagegd2($image);
$bytes = ob_get_clean();
} finally { restore_error_handler(); }
echo $bytes === "" && $warnings !== [] ? "codec unavailable in this build\n" : "codec available\n";
Ожидаемый результат
codec available
В этой bundled GD кодек доступен. На другом сервере он может быть отключён. Локальный обработчик фиксирует диагностику только этой проверки.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagegd2($image, "cache.gd2", 128, IMG_GD2_COMPRESSED);
$loaded = imagecreatefromgd2part("cache.gd2", 1, 1, 3, 2);
echo imagesx($loaded), "x", imagesy($loaded), "\n";
Текстовая проверка результата
3x2
Проверено только в сборке с работающим кодеком. GD2 part читает область; для нового долговечного формата предпочтителен PNG.
Скачать PNG
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagepng($image, "cache.png");
$restored = imagecreatefrompng("cache.png");
echo imagesx($restored), "x", imagesy($restored), "\n";
Текстовая проверка результата
8x6
PNG не умеет специальное чтение GD2 чанков, но совместим и сохраняет без потерь. Для очень больших изображений выбирайте специализированный tiled формат/библиотеку.
Связанные операции: imagepng, imagecreatefrompng, imagecrop.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
image2wbmpУзнать удалённую функцию в старом проекте и перейти к явному чтению, масштабу и WBMP-кодированию.
Удалена PHP8.0 · gd
image2wbmp(resource $image, string $filename = ?, int $foreground = ?): boolУзнать удалённую функцию в старом проекте и перейти к явному чтению, масштабу и WBMP-кодированию.
| Параметры и результат | Как понимать и применять |
|---|---|
| Статус | image2wbmp deprecated7.3; jpeg2wbmp/png2wbmp deprecated7.2. Все три удалены PHP8.0. Вызов в новом PHP завершится Error. |
| Исторические аргументы | image2wbmp принимала gd-resource, optionalfilename, foreground(defaultblack). Конвертеры принимали исходный путь, целевой путь, dest_height, dest_width и threshold0..8 — порядок высота/ширина отличается от многих функций GD. |
| Исторический результат | bool, но true не всегда гарантировал файл. Для threshold-конверсии миграция должна явно выбрать порог/палитру: простая замена имени не воспроизводит старое квантование. |
<?php
declare(strict_types=1);
var_dump(function_exists("image2wbmp"));
Ожидаемый результат
bool(false)
Отсутствие в PHP8 ожидаемо; не пытайтесь включить функцию настройкой ini.
Скачать PNG
Скачать WBMPИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagepng($image, "original.png");
$source = imagecreatefrompng("original.png");
$small = imagescale($source, 4, 3, IMG_NEAREST_NEIGHBOUR);
imagewbmp($small, "legacy.wbmp");
$info = getimagesize("legacy.wbmp");
echo $info[0], "x", $info[1], "\n";
Текстовая проверка результата
4x3
WBMP нужен только при требовании старого потребителя. Для сайта оставьте PNG/JPEG/WebP/AVIF.
Связанные операции: imagewbmp, imagescale.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
jpeg2wbmpУзнать удалённую функцию в старом проекте и перейти к явному чтению, масштабу и WBMP-кодированию.
Удалена PHP8.0 · gd
jpeg2wbmp(string $jpegname, string $wbmpname, int $dest_height, int $dest_width, int $threshold): boolУзнать удалённую функцию в старом проекте и перейти к явному чтению, масштабу и WBMP-кодированию.
| Параметры и результат | Как понимать и применять |
|---|---|
| Статус | image2wbmp deprecated7.3; jpeg2wbmp/png2wbmp deprecated7.2. Все три удалены PHP8.0. Вызов в новом PHP завершится Error. |
| Исторические аргументы | image2wbmp принимала gd-resource, optionalfilename, foreground(defaultblack). Конвертеры принимали исходный путь, целевой путь, dest_height, dest_width и threshold0..8 — порядок высота/ширина отличается от многих функций GD. |
| Исторический результат | bool, но true не всегда гарантировал файл. Для threshold-конверсии миграция должна явно выбрать порог/палитру: простая замена имени не воспроизводит старое квантование. |
<?php
declare(strict_types=1);
var_dump(function_exists("jpeg2wbmp"));
Ожидаемый результат
bool(false)
Отсутствие в PHP8 ожидаемо; не пытайтесь включить функцию настройкой ini.
Скачать PNG
Скачать WBMPИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagepng($image, "original.png");
$source = imagecreatefrompng("original.png");
$small = imagescale($source, 4, 3, IMG_NEAREST_NEIGHBOUR);
imagewbmp($small, "legacy.wbmp");
$info = getimagesize("legacy.wbmp");
echo $info[0], "x", $info[1], "\n";
Текстовая проверка результата
4x3
WBMP нужен только при требовании старого потребителя. Для сайта оставьте PNG/JPEG/WebP/AVIF.
Связанные операции: imagewbmp, imagescale.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
png2wbmpУзнать удалённую функцию в старом проекте и перейти к явному чтению, масштабу и WBMP-кодированию.
Удалена PHP8.0 · gd
png2wbmp(string $pngname, string $wbmpname, int $dest_height, int $dest_width, int $threshold): boolУзнать удалённую функцию в старом проекте и перейти к явному чтению, масштабу и WBMP-кодированию.
| Параметры и результат | Как понимать и применять |
|---|---|
| Статус | image2wbmp deprecated7.3; jpeg2wbmp/png2wbmp deprecated7.2. Все три удалены PHP8.0. Вызов в новом PHP завершится Error. |
| Исторические аргументы | image2wbmp принимала gd-resource, optionalfilename, foreground(defaultblack). Конвертеры принимали исходный путь, целевой путь, dest_height, dest_width и threshold0..8 — порядок высота/ширина отличается от многих функций GD. |
| Исторический результат | bool, но true не всегда гарантировал файл. Для threshold-конверсии миграция должна явно выбрать порог/палитру: простая замена имени не воспроизводит старое квантование. |
<?php
declare(strict_types=1);
var_dump(function_exists("png2wbmp"));
Ожидаемый результат
bool(false)
Отсутствие в PHP8 ожидаемо; не пытайтесь включить функцию настройкой ini.
Скачать PNG
Скачать WBMPИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
$white = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $white);
$black = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 1, 1, 4, 4, $black);
$red = imagecolorallocate($image, 220, 50, 45);
imagesetpixel($image, 6, 1, $red);
imagepng($image, "original.png");
$source = imagecreatefrompng("original.png");
$small = imagescale($source, 4, 3, IMG_NEAREST_NEIGHBOUR);
imagewbmp($small, "legacy.wbmp");
$info = getimagesize("legacy.wbmp");
echo $info[0], "x", $info[1], "\n";
Текстовая проверка результата
4x3
WBMP нужен только при требовании старого потребителя. Для сайта оставьте PNG/JPEG/WebP/AVIF.
Связанные операции: imagewbmp, imagescale.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagegrabscreenПолучить экран Windows в локальном инструменте, когда пользователь явно запросил снимок.
PHP 8: GdImage · gd
imagegrabscreen(): GdImage|falseПолучить экран Windows в локальном инструменте, когда пользователь явно запросил снимок.
| Параметры и результат | Как понимать и применять |
|---|---|
| Окружение | Только Windows и доступный интерактивный рабочий стол. Это не скриншот браузера посетителя: PHP на сервере видит окружение сервера. |
| Аргументы | Нет. |
| Возврат | GdImage либо false; сервисная сессия/права/состояние окна влияют на результат. Не используйте для рендера произвольной веб-страницы. |
<?php
declare(strict_types=1);
echo PHP_OS_FAMILY === "Windows" && function_exists("imagegrabscreen") ? "Windows API present\n" : "not available\n";
Ожидаемый результат
Windows API present
Проверка не захватывает экран и не доказывает доступность снимка в текущей сессии.
$screen = imagegrabscreen();
Это контекстный фрагмент. Захват экрана/окна не выполнялся; результат следует проверить !==false, затем сохранить через imagepng.
Связанные операции: imagepng.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagegrabwindowПолучить окно Windows в локальном инструменте, когда пользователь явно запросил снимок.
PHP 8: GdImage · gd
imagegrabwindow(int $handle, bool $client_area = false): GdImage|falseПолучить окно Windows в локальном инструменте, когда пользователь явно запросил снимок.
| Параметры и результат | Как понимать и применять |
|---|---|
| Окружение | Только Windows и доступный интерактивный рабочий стол. Это не скриншот браузера посетителя: PHP на сервере видит окружение сервера. |
| Аргументы | handle — HWND целевой windows-форточки, не PID и не браузерный tabId; client_area=true выбирает клиентскую область, false включает оформление окна. Неверный HWND даёт E_NOTICE, слишком старый WindowsAPI E_WARNING. |
| Возврат | GdImage либо false; сервисная сессия/права/состояние окна влияют на результат. Не используйте для рендера произвольной веб-страницы. |
<?php
declare(strict_types=1);
echo PHP_OS_FAMILY === "Windows" && function_exists("imagegrabwindow") ? "Windows API present\n" : "not available\n";
Ожидаемый результат
Windows API present
Проверка не захватывает экран и не доказывает доступность снимка в текущей сессии.
$window = imagegrabwindow($windowHandle, true);
Это контекстный фрагмент. Захват экрана/окна не выполнялся; результат следует проверить !==false, затем сохранить через imagepng.
Связанные операции: imagepng.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagefontwidthУзнать ширину одной ячейки bitmapшрифта перед размещением подписи.
PHP 8: GdImage · gd
imagefontwidth(GdFont|int $font): intУзнать ширину одной ячейки bitmap шрифта перед размещением подписи.
| Параметры и результат | Как понимать и применять |
|---|---|
| font | Целое 1..5 выбирает встроенный Latin2bitmap шрифт (большее число крупнее), либо GdFont из imageloadfont (PHP8.1+). Это не путь.ttf и не размер в points; UTF-8 кириллица требует FreeType. |
| Возврат | int пикселей. Встроенные шрифты моноширинные, поэтому ASCII строка занимает strlen(text)×width. Это не измерение UTF-8TrueType текста. |
<?php
declare(strict_types=1);
echo imagefontwidth(1), "\n";
Ожидаемый результат
5
У первого шрифта ячейка 5×8 пикселей.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$label = "SKU42";
$width = strlen($label) * imagefontwidth(3) + 8;
$height = imagefontheight(3) + 8;
$image = imagecreatetruecolor($width, $height);
$ink = imagecolorallocate($image, 255, 255, 255);
imagestring($image, 3, 4, 4, $label, $ink);
echo imagesx($image) > 8 && imagesy($image) > 8 ? "text and padding fit\n" : "too small\n";
Текстовая проверка результата
text and padding fit
На картинке виден код SKU42 с отступом 4 пикселя со всех сторон. imagestring использует тот же шрифт 3, которым посчитаны размеры. Четыре пикселя с каждой стороны добавляют 8 к общей длине. Для перевода текста на кириллицу меняется и способ измерения.
Связанные операции: imagestring, imagettfbbox.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagefontheightУзнать высоту одной ячейки bitmapшрифта перед размещением подписи.
PHP 8: GdImage · gd
imagefontheight(GdFont|int $font): intУзнать высоту одной ячейки bitmap шрифта перед размещением подписи.
| Параметры и результат | Как понимать и применять |
|---|---|
| font | Целое 1..5 выбирает встроенный Latin2bitmap шрифт (большее число крупнее), либо GdFont из imageloadfont (PHP8.1+). Это не путь.ttf и не размер в points; UTF-8 кириллица требует FreeType. |
| Возврат | int пикселей. Встроенные шрифты моноширинные, поэтому ASCII строка занимает strlen(text)×width. Это не измерение UTF-8TrueType текста. |
<?php
declare(strict_types=1);
echo imagefontheight(1), "\n";
Ожидаемый результат
8
У первого шрифта ячейка 5×8 пикселей.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$label = "SKU42";
$width = strlen($label) * imagefontwidth(3) + 8;
$height = imagefontheight(3) + 8;
$image = imagecreatetruecolor($width, $height);
$ink = imagecolorallocate($image, 255, 255, 255);
imagestring($image, 3, 4, 4, $label, $ink);
echo imagesx($image) > 8 && imagesy($image) > 8 ? "text and padding fit\n" : "too small\n";
Текстовая проверка результата
text and padding fit
На картинке виден код SKU42 с отступом 4 пикселя со всех сторон. imagestring использует тот же шрифт 3, которым посчитаны размеры. Четыре пикселя с каждой стороны добавляют 8 к общей длине. Для перевода текста на кириллицу меняется и способ измерения.
Связанные операции: imagestring, imagettfbbox.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecharНарисовать один bitmapсимвол горизонтально, например код позиции на схеме.
PHP 8: GdImage · gd
imagechar(GdImage $image, GdFont|int $font, int $x, int $y, string $char, int $color): trueНарисовать один bitmap символ горизонтально, например код позиции на схеме.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| font | Целое 1..5 выбирает встроенный Latin2bitmap шрифт (большее число крупнее), либо GdFont из imageloadfont (PHP8.1+). Это не путь.ttf и не размер в points; UTF-8 кириллица требует FreeType. |
| x, y | Точка начала; верхний левый угол bitmap ячейки, в отличие от baselineFreeType. |
| char/string, color | Текст в однобайтовом наборе шрифта, используется первый символ; color из imagecolorallocate. Не передавайте UTF-8 многобайтовый текст как последовательность правильных glyphs. |
| Возврат | true; изменяет холст. Не переносит длинный текст по шири не и не подбирает размер автоматически. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(50, 40);
$white = imagecolorallocate($image, 255, 255, 255);
imagechar($image, 3, 2, 2, "A", $white);
imagepng($image, "label.png");
echo "label.png\n";
Текстовая проверка результата
label.png
На картинке виден результат: одна буква A, расположенная слева направо. Здесь не нужны циклы или подсчёт пикселей: проверьте знак, направление и отступы непосредственно на PNG.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(50, 40);
$white = imagecolorallocate($image, 255, 255, 255);
imagechar($image, 3, 2, 2, "A", $white);
imagepng($image, "label.png");
echo getimagesize("label.png")["mime"], "\n";
Текстовая проверка результата
image/png
Для посетителя текст важного интерфейса лучше оставить HTML; растровые подписи уместны в экспортируемом изображении.
Связанные операции: imagefontwidth, imagefontheight, imagettftext.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagecharupНарисовать один bitmapсимвол вертикально снизу вверх, например подпись оси.
PHP 8: GdImage · gd
imagecharup(GdImage $image, GdFont|int $font, int $x, int $y, string $char, int $color): trueНарисовать один bitmap символ вертикально снизу вверх, например подпись оси.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| font | Целое 1..5 выбирает встроенный Latin2bitmap шрифт (большее число крупнее), либо GdFont из imageloadfont (PHP8.1+). Это не путь.ttf и не размер в points; UTF-8 кириллица требует FreeType. |
| x, y | Точка начала; у stringup это нижний левый угол, направление снизу вверх. |
| char/string, color | Текст в однобайтовом наборе шрифта, используется первый символ; color из imagecolorallocate. Не передавайте UTF-8 многобайтовый текст как последовательность правильных glyphs. |
| Возврат | true; изменяет холст. Не переносит длинный текст по шири не и не подбирает размер автоматически. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(50, 40);
$white = imagecolorallocate($image, 255, 255, 255);
imagecharup($image, 3, 2, 35, "A", $white);
imagepng($image, "label.png");
echo "label.png\n";
Текстовая проверка результата
label.png
На картинке виден результат: одна буква A, направленная снизу вверх. Здесь не нужны циклы или подсчёт пикселей: проверьте знак, направление и отступы непосредственно на PNG.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(50, 40);
$white = imagecolorallocate($image, 255, 255, 255);
imagecharup($image, 3, 2, 35, "A", $white);
imagepng($image, "label.png");
echo getimagesize("label.png")["mime"], "\n";
Текстовая проверка результата
image/png
Для посетителя текст важного интерфейса лучше оставить HTML; растровые подписи уместны в экспортируемом изображении.
Связанные операции: imagefontwidth, imagefontheight, imagettftext.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagestringНарисовать короткую bitmapстроку горизонтально, например код позиции на схеме.
PHP 8: GdImage · gd
imagestring(GdImage $image, GdFont|int $font, int $x, int $y, string $string, int $color): trueНарисовать короткую bitmap строку горизонтально, например код позиции на схеме.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| font | Целое 1..5 выбирает встроенный Latin2bitmap шрифт (большее число крупнее), либо GdFont из imageloadfont (PHP8.1+). Это не путь.ttf и не размер в points; UTF-8 кириллица требует FreeType. |
| x, y | Точка начала; верхний левый угол bitmap ячейки, в отличие от baselineFreeType. |
| char/string, color | Текст в однобайтовом наборе шрифта, color из imagecolorallocate. Не передавайте UTF-8 многобайтовый текст как последовательность правильных glyphs. |
| Возврат | true; изменяет холст. Не переносит длинный текст по шири не и не подбирает размер автоматически. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(50, 40);
$white = imagecolorallocate($image, 255, 255, 255);
imagestring($image, 3, 2, 2, "ABC", $white);
imagepng($image, "label.png");
echo "label.png\n";
Текстовая проверка результата
label.png
На картинке виден результат: строка ABC, расположенная слева направо. Здесь не нужны циклы или подсчёт пикселей: проверьте знак, направление и отступы непосредственно на PNG.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(50, 40);
$white = imagecolorallocate($image, 255, 255, 255);
imagestring($image, 3, 2, 2, "ABC", $white);
imagepng($image, "label.png");
echo getimagesize("label.png")["mime"], "\n";
Текстовая проверка результата
image/png
Для посетителя текст важного интерфейса лучше оставить HTML; растровые подписи уместны в экспортируемом изображении.
Связанные операции: imagefontwidth, imagefontheight, imagettftext.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagestringupНарисовать короткую bitmapстроку вертикально снизу вверх, например подпись оси.
PHP 8: GdImage · gd
imagestringup(GdImage $image, GdFont|int $font, int $x, int $y, string $string, int $color): trueНарисовать короткую bitmap строку вертикально снизу вверх, например подпись оси.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| font | Целое 1..5 выбирает встроенный Latin2bitmap шрифт (большее число крупнее), либо GdFont из imageloadfont (PHP8.1+). Это не путь.ttf и не размер в points; UTF-8 кириллица требует FreeType. |
| x, y | Точка начала; у stringup это нижний левый угол, направление снизу вверх. |
| char/string, color | Текст в однобайтовом наборе шрифта, color из imagecolorallocate. Не передавайте UTF-8 многобайтовый текст как последовательность правильных glyphs. |
| Возврат | true; изменяет холст. Не переносит длинный текст по шири не и не подбирает размер автоматически. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(50, 40);
$white = imagecolorallocate($image, 255, 255, 255);
imagestringup($image, 3, 2, 35, "ABC", $white);
imagepng($image, "label.png");
echo "label.png\n";
Текстовая проверка результата
label.png
На картинке виден результат: строка ABC, направленная снизу вверх. Здесь не нужны циклы или подсчёт пикселей: проверьте знак, направление и отступы непосредственно на PNG.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(50, 40);
$white = imagecolorallocate($image, 255, 255, 255);
imagestringup($image, 3, 2, 35, "ABC", $white);
imagepng($image, "label.png");
echo getimagesize("label.png")["mime"], "\n";
Текстовая проверка результата
image/png
Для посетителя текст важного интерфейса лучше оставить HTML; растровые подписи уместны в экспортируемом изображении.
Связанные операции: imagefontwidth, imagefontheight, imagettftext.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imageloadfontЗагрузить собственный небольшой bitmapшрифт для старой фиксированной пиксельной схемы.
PHP 8: GdImage · gd
imageloadfont(string $filename): GdFont|falseЗагрузить собственный небольшой bitmap шрифт для старой фиксированной пиксельной схемы.
| Параметры и результат | Как понимать и применять |
|---|---|
| filename | Путь к бинарному GDF шрифту. Формат зависит от архитектуры CPU: 4nativeCint — количество символов, код первого, ширина и высота каждого; затем nchars×width×height байтов пикселей. |
| Возврат / версии | GdFont либо false; до 8.1 возвращался int. Для.ttf эта функция не подходит. Не принимайте произвольный шрифтовой файл от посетителя. |
<?php
declare(strict_types=1);
$header = pack("i4", 1, 65, 2, 2);
file_put_contents("fixture.gdf", $header . chr(1) . chr(1) . chr(1) . chr(1));
$font = imageloadfont("fixture.gdf");
echo get_class($font), " ", imagefontwidth($font), "x", imagefontheight($font), "\n";
Ожидаемый результат
GdFont 2x2
pack i использует машинный signedint; fixture создаётся и читается на одной архитектуре. Символ A здесь специально выглядит квадратом.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$header = pack("i4", 1, 65, 2, 2);
file_put_contents("fixture.gdf", $header . chr(1) . chr(1) . chr(1) . chr(1));
$font = imageloadfont("fixture.gdf");
$image = imagecreatetruecolor(4, 4);
$white = imagecolorallocate($image, 255, 255, 255);
imagestring($image, $font, 0, 0, "A", $white);
echo imagecolorat($image, 0, 0) === $white ? "custom glyph drawn\n" : "empty\n";
Текстовая проверка результата
custom glyph drawn
Объект font передаётся в обычную imagestring, поэтому приложение не знает внутренний двоичный формат.
Связанные операции: imagestring, imagefontwidth, imagefontheight.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imageftbboxИзмерить будущую надпись до рисования, чтобы она не обрезалась и помещалась в плашку.
PHP 8: GdImage · gd
imageftbbox(float $size, float $angle, string $font_filename, string $string, array $options = []): array|falseИзмерить будущую надпись до рисования, чтобы она не обрезалась и помещалась в плашку.
| Параметры и результат | Как понимать и применять |
|---|---|
| size, angle | size — размер в points, не пикселях; angle — градусы против часовой стрелки,0 обычный текст,90 снизу вверх. |
| font_filename | Явный проверенный абсолютный путь к.ttf. Относительный поиск/GDFONTPATH зависит от libgd; старые GD до 2.0.18 имели проблемы с пробелами в путях. open_basedir не защищает путь шрифта — не давайте пользователю выбирать произвольный файл. |
| string/text, options | UTF-8 текст, нужные glyphs должны быть в шрифте. Числовые HTML references поддержаны, именованные вроде © предварительно декодируются. options["linespacing"] float задаёт межстрочный интервал. |
| Возврат | array из 8 координат четырёх углов:0,1 нижний левый;2,3 нижний правый;4,5 верхний правый;6,7 верхний левый относительно направления текста. false при отказе. Для повернутого текста габариты вычисляются через min/max всех x/y, а не только x2−x0. |
| Версии | С PHP 8 imagettfbbox — alias imageftbbox, imagettftext — alias imagefttext; раньше FT варианты дополнительно принимали options. |
<?php
declare(strict_types=1);
$fontBytes = base64_decode(file_get_contents("fixture-font.base64"), true);
file_put_contents("fixture.ttf", $fontBytes);
$font = __DIR__ . "/fixture.ttf";
$box = imageftbbox(18.0, 0.0, $font, "Чашка");
echo count($box), "\n";
echo max($box[0], $box[2], $box[4], $box[6]) > min($box[0], $box[2], $box[4], $box[6]) ? "positive width\n" : "empty\n";
Ожидаемый результат
8
positive width
В архиве настоящий DejaVu Sans с кириллицей и лицензией. Первые строки восстанавливают TTF из текстового вложения; в проекте с готовым TTF оставьте путь $font. Четыре угла описывают слово Чашка относительно baseline, а не новый рисунок. Для видимой подписи следующий шаг — imagefttext.
<?php
declare(strict_types=1);
$fontBytes = base64_decode(file_get_contents("fixture-font.base64"), true);
file_put_contents("fixture.ttf", $fontBytes);
$font = __DIR__ . "/fixture.ttf";
$box = imageftbbox(18.0, 0.0, $font, "Чашка");
$xs = [$box[0], $box[2], $box[4], $box[6]];
$ys = [$box[1], $box[3], $box[5], $box[7]];
$width = max($xs) - min($xs) + 8;
$height = max($ys) - min($ys) + 8;
$x = 4 - min($xs);
$y = 4 - min($ys);
echo $width > 8 && $height > 8 && $y >= 4 ? "box with padding ready\n" : "invalid\n";
Ожидаемый результат
box with padding ready
Отрицательная верхняя координата нормальна: bbox отсчитывается от базовой линии, а не от верха холста.
Связанные операции: imagefttext, imagettftext.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagettfbboxИзмерить будущую надпись до рисования, чтобы она не обрезалась и помещалась в плашку.
PHP 8: GdImage · gd
imagettfbbox(float $size, float $angle, string $font_filename, string $string, array $options = []): array|falseИзмерить будущую надпись до рисования, чтобы она не обрезалась и помещалась в плашку.
| Параметры и результат | Как понимать и применять |
|---|---|
| size, angle | size — размер в points, не пикселях; angle — градусы против часовой стрелки,0 обычный текст,90 снизу вверх. |
| font_filename | Явный проверенный абсолютный путь к.ttf. Относительный поиск/GDFONTPATH зависит от libgd; старые GD до 2.0.18 имели проблемы с пробелами в путях. open_basedir не защищает путь шрифта — не давайте пользователю выбирать произвольный файл. |
| string/text, options | UTF-8 текст, нужные glyphs должны быть в шрифте. Числовые HTML references поддержаны, именованные вроде © предварительно декодируются. options["linespacing"] float задаёт межстрочный интервал. |
| Возврат | array из 8 координат четырёх углов:0,1 нижний левый;2,3 нижний правый;4,5 верхний правый;6,7 верхний левый относительно направления текста. false при отказе. Для повернутого текста габариты вычисляются через min/max всех x/y, а не только x2−x0. |
| Версии | С PHP 8 imagettfbbox — alias imageftbbox, imagettftext — alias imagefttext; раньше FT варианты дополнительно принимали options. |
<?php
declare(strict_types=1);
$fontBytes = base64_decode(file_get_contents("fixture-font.base64"), true);
file_put_contents("fixture.ttf", $fontBytes);
$font = __DIR__ . "/fixture.ttf";
$box = imagettfbbox(18.0, 0.0, $font, "Чашка");
echo count($box), "\n";
echo max($box[0], $box[2], $box[4], $box[6]) > min($box[0], $box[2], $box[4], $box[6]) ? "positive width\n" : "empty\n";
Ожидаемый результат
8
positive width
В архиве настоящий DejaVu Sans с кириллицей и лицензией. Первые строки восстанавливают TTF из текстового вложения; в проекте с готовым TTF оставьте путь $font. Четыре угла описывают слово Чашка относительно baseline, а не новый рисунок. Для видимой подписи следующий шаг — imagefttext.
<?php
declare(strict_types=1);
$fontBytes = base64_decode(file_get_contents("fixture-font.base64"), true);
file_put_contents("fixture.ttf", $fontBytes);
$font = __DIR__ . "/fixture.ttf";
$box = imagettfbbox(18.0, 0.0, $font, "Чашка");
$xs = [$box[0], $box[2], $box[4], $box[6]];
$ys = [$box[1], $box[3], $box[5], $box[7]];
$width = max($xs) - min($xs) + 8;
$height = max($ys) - min($ys) + 8;
$x = 4 - min($xs);
$y = 4 - min($ys);
echo $width > 8 && $height > 8 && $y >= 4 ? "box with padding ready\n" : "invalid\n";
Ожидаемый результат
box with padding ready
Отрицательная верхняя координата нормальна: bbox отсчитывается от базовой линии, а не от верха холста.
Связанные операции: imagefttext, imagettftext.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagefttextПодписать изображение масштабируемым шрифтом: название товара, дата отчёта или водяной знак.
PHP 8: GdImage · gd
imagefttext(GdImage $image, float $size, float $angle, int $x, int $y, int $color, string $font_filename, string $text, array $options = []): array|falseПодписать изображение масштабируемым шрифтом: название товара, дата отчёта или водяной знак.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| size, angle | size — размер в points, не пикселях; angle — градусы против часовой стрелки,0 обычный текст,90 снизу вверх. |
| font_filename | Явный проверенный абсолютный путь к.ttf. Относительный поиск/GDFONTPATH зависит от libgd; старые GD до 2.0.18 имели проблемы с пробелами в путях. open_basedir не защищает путь шрифта — не давайте пользователю выбирать произвольный файл. |
| string/text, options | UTF-8 текст, нужные glyphs должны быть в шрифте. Числовые HTML references поддержаны, именованные вроде © предварительно декодируются. options["linespacing"] float задаёт межстрочный интервал. |
| Возврат | array из 8 координат четырёх углов:0,1 нижний левый;2,3 нижний правый;4,5 верхний правый;6,7 верхний левый относительно направления текста. false при отказе. Для повернутого текста габариты вычисляются через min/max всех x/y, а не только x2−x0. |
| Версии | С PHP 8 imagettfbbox — alias imageftbbox, imagettftext — alias imagefttext; раньше FT варианты дополнительно принимали options. |
| x, y, color | x, y — точка базовой линии первого символа, не верхний левый угол и не нижняя граница всех glyphs. Цвет из allocate; отрицательное значение color выключает сглаживание для FreeType. Для чёрного 0 отрицание не меняет число — выбирайте подходящий способ/палитру осознанно. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$fontBytes = base64_decode(file_get_contents("fixture-font.base64"), true);
file_put_contents("fixture.ttf", $fontBytes);
$font = __DIR__ . "/fixture.ttf";
$image = imagecreatetruecolor(240, 70);
$white = imagecolorallocate($image, 255, 255, 255);
$box = imagefttext($image, 18.0, 0.0, 4, 44, $white, $font, "Чашка");
echo count($box), " coordinates\n";
imagepng($image, "label.png");
echo getimagesize("label.png")[0], "x", getimagesize("label.png")[1], "\n";
Текстовая проверка результата
8 coordinates
240x70
На картинке настоящее русское слово Чашка. Размер 18 задан в points; координата y=44 — базовая линия, на которой стоят буквы, а не верхняя граница текста. Успешный bbox не означает, что всё помещается: слишком длинная строка выйдет за холст. В архиве есть лицензия шрифта.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$fontBytes = base64_decode(file_get_contents("fixture-font.base64"), true);
file_put_contents("fixture.ttf", $fontBytes);
$font = __DIR__ . "/fixture.ttf";
$image = imagecreatetruecolor(240, 70);
$white = imagecolorallocate($image, 255, 255, 255);
$box = imageftbbox(18.0, 0.0, $font, "Чашка");
$left = min($box[0], $box[2], $box[4], $box[6]);
$right = max($box[0], $box[2], $box[4], $box[6]);
$x = (int) floor((imagesx($image) - ($right - $left)) / 2 - $left);
imagefttext($image, 18.0, 0.0, $x, 44, $white, $font, "Чашка");
echo $x > 0 ? "centered with margin\n" : "too wide\n";
Текстовая проверка результата
centered with margin
Текст измерен теми же font/size/angle, которыми рисуется. Для длинной подписи выберите перенос или меньший размер; обрезать молча неудобно.
Связанные операции: imageftbbox, imagettfbbox, imagestring.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
imagettftextПодписать изображение масштабируемым шрифтом: название товара, дата отчёта или водяной знак.
PHP 8: GdImage · gd
imagettftext(GdImage $image, float $size, float $angle, int $x, int $y, int $color, string $font_filename, string $text, array $options = []): array|falseПодписать изображение масштабируемым шрифтом: название товара, дата отчёта или водяной знак.
| Параметры и результат | Как понимать и применять |
|---|---|
| image | Объект GdImage — распакованные пиксели в памяти, не имя файла. Создайте холст или декодируйте файл. Операции рисования меняют этот же объект; присваивание другой переменной его не копирует. |
| size, angle | size — размер в points, не пикселях; angle — градусы против часовой стрелки,0 обычный текст,90 снизу вверх. |
| font_filename | Явный проверенный абсолютный путь к.ttf. Относительный поиск/GDFONTPATH зависит от libgd; старые GD до 2.0.18 имели проблемы с пробелами в путях. open_basedir не защищает путь шрифта — не давайте пользователю выбирать произвольный файл. |
| string/text, options | UTF-8 текст, нужные glyphs должны быть в шрифте. Числовые HTML references поддержаны, именованные вроде © предварительно декодируются. options["linespacing"] float задаёт межстрочный интервал. |
| Возврат | array из 8 координат четырёх углов:0,1 нижний левый;2,3 нижний правый;4,5 верхний правый;6,7 верхний левый относительно направления текста. false при отказе. Для повернутого текста габариты вычисляются через min/max всех x/y, а не только x2−x0. |
| Версии | С PHP 8 imagettfbbox — alias imageftbbox, imagettftext — alias imagefttext; раньше FT варианты дополнительно принимали options. |
| x, y, color | x, y — точка базовой линии первого символа, не верхний левый угол и не нижняя граница всех glyphs. Цвет из allocate; отрицательное значение color выключает сглаживание для FreeType. Для чёрного 0 отрицание не меняет число — выбирайте подходящий способ/палитру осознанно. |
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$fontBytes = base64_decode(file_get_contents("fixture-font.base64"), true);
file_put_contents("fixture.ttf", $fontBytes);
$font = __DIR__ . "/fixture.ttf";
$image = imagecreatetruecolor(240, 70);
$white = imagecolorallocate($image, 255, 255, 255);
$box = imagettftext($image, 18.0, 0.0, 4, 44, $white, $font, "Чашка");
echo count($box), " coordinates\n";
imagepng($image, "label.png");
echo getimagesize("label.png")[0], "x", getimagesize("label.png")[1], "\n";
Текстовая проверка результата
8 coordinates
240x70
На картинке настоящее русское слово Чашка. Размер 18 задан в points; координата y=44 — базовая линия, на которой стоят буквы, а не верхняя граница текста. Успешный bbox не означает, что всё помещается: слишком длинная строка выйдет за холст. В архиве есть лицензия шрифта.
Скачать PNGИзображения получены выполнением кода этого примера. Шахматный фон обозначает прозрачность и не входит в PNG.
<?php
declare(strict_types=1);
$fontBytes = base64_decode(file_get_contents("fixture-font.base64"), true);
file_put_contents("fixture.ttf", $fontBytes);
$font = __DIR__ . "/fixture.ttf";
$image = imagecreatetruecolor(240, 70);
$white = imagecolorallocate($image, 255, 255, 255);
$box = imageftbbox(18.0, 0.0, $font, "Чашка");
$left = min($box[0], $box[2], $box[4], $box[6]);
$right = max($box[0], $box[2], $box[4], $box[6]);
$x = (int) floor((imagesx($image) - ($right - $left)) / 2 - $left);
imagettftext($image, 18.0, 0.0, $x, 44, $white, $font, "Чашка");
echo $x > 0 ? "centered with margin\n" : "too wide\n";
Текстовая проверка результата
centered with margin
Текст измерен теми же font/size/angle, которыми рисуется. Для длинной подписи выберите перенос или меньший размер; обрезать молча неудобно.
Связанные операции: imageftbbox, imagettfbbox, imagestring.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
iptcparseПолучить подпись или ключевые слова из IPTCблока фотографического архива.
PHP 8: GdImage · standard
iptcparse(string $iptc_block): array|falseПолучить подпись или ключевые слова из IPTC блока фотографического архива.
| Параметры и результат | Как понимать и применять |
|---|---|
| iptc_block | Бинарный IPTC блок, обычно APP13 из getimagesize($filename,$info), не полный JPEG и не JSON. |
| Возврат | Ассоциативный массив: ключи вроде 2#120(подпись),2#025(ключевые слова),2#080(автор), значения — массивы, потому что тег может повторяться. false при ошибке/отсутствии IPTC. |
| Текст | IPTC байты не гарантированно UTF-8; учитывайте объявленную кодировку(например 1#090) и договор поставщика. При выводе в HTML экранируйте подпись, не доверяйте metadata. |
<?php
declare(strict_types=1);
$caption = "Manual photo";
$block = chr(0x1c) . chr(2) . chr(120) . pack("n", strlen($caption)) . $caption;
$tags = iptcparse($block);
echo $tags["2#120"][0], "\n";
Ожидаемый результат
Manual photo
1C — маркер,2 номер записи,120 номер поля, два байта длины, затем текст; iptcparse снимает с вас ручной разбор.
<?php
declare(strict_types=1);
$block = "";
foreach (["shop", "catalog"] as $word) {
$block .= chr(0x1c) . chr(2) . chr(25) . pack("n", strlen($word)) . $word;
}
$tags = iptcparse($block);
echo implode(",", $tags["2#025"]), "\n";
Ожидаемый результат
shop,catalog
Нельзя ожидать скаляр из каждого поля: несколько ключевых слов представлены массивом.
Связанные операции: iptcembed, getimagesize.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
iptcembedДобавитьIPTCподпись кJPEGархива, не изменяя сами пиксели.
PHP 8: GdImage · standard
iptcembed(string $iptc_data, string $filename, int $spool = 0): string|boolДобавить IPTC подпись к JPEG архива, не изменяя сами пиксели.
| Параметры и результат | Как понимать и применять |
|---|---|
| iptc_data, filename | Бинарный IPTC блок и путь к существующему JPEG. Функция не принимает GdImage; перед этим закодируйте картинку при необходимости. |
| spool | 0(default)возвращает JPEG строкой;1 возвращает строку и выводит её;2 и выше выводят байты в STDOUT и больше не возвращают JPEG. Уточняйте политику вывода: метаданные не должны смешаться с HTML. |
| Возврат | При spool<2 string|false; при spool≥2 bool. Оригинальный файл не перезаписывается автоматически: сохраните вернувшуюся строку по выбранному пути. |
| Граница | Это IPTC-IIM, не EXIF/XMP редактор. Перезапись JPEG через GD может выбросить metadata; если поля нужны, перенесите их явно. Длина обычных коротких dataset кодируется двумя байтами; для больших нужна расширенная IPTC длина. |
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
imagejpeg($image, "photo.jpg");
$caption = "Manual photo";
$block = chr(0x1c) . chr(2) . chr(120) . pack("n", strlen($caption)) . $caption;
$jpeg = iptcembed($block, "photo.jpg", 0);
file_put_contents("tagged.jpg", $jpeg);
$info = [];
getimagesize("tagged.jpg", $info);
$tags = iptcparse($info["APP13"]);
echo $tags["2#120"][0], "\n";
Ожидаемый результат
Manual photo
image_info заполняется по ссылке, основной результат getimagesize содержит другие данные.
<?php
declare(strict_types=1);
$image = imagecreatetruecolor(8, 6);
imagejpeg($image, "photo.jpg");
$caption = "Manual photo";
$block = chr(0x1c) . chr(2) . chr(120) . pack("n", strlen($caption)) . $caption;
ob_start();
$ok = iptcembed($block, "photo.jpg", 2);
$bytes = ob_get_clean();
echo $ok && strlen($bytes) > 0 ? "JPEG output captured\n" : "failed\n";
Ожидаемый результат
JPEG output captured
В HTTP обработчике header передаётся до вызова. Буфер здесь нужен для автономной проверки, не для сокрытия ошибок.
Связанные операции: iptcparse, imagejpeg, getimagesize.
Первый холст, координаты, пиксели и сохранение · Ошибки, размер и граница загрузки.
Источники и обсуждения
Код и руководство с собой
Скачайте самостоятельные примеры с исходными данными, инструкциями и ожидаемыми результатами. Примеры HTTP и фрагменты для проекта помечены отдельно: им нужно указанное окружение.
Код не исполняется на сайте. Скачайте нужный пример и запускайте его в своём локальном окружении.
Материалы сверены 2026-10-12. Примеры и объяснения написаны для этого руководства; источники и обсуждения доступны в каждой главе.


