PHPerKaigi 2025

Обработка изображений и модуль GD

  • Введение
  • Установка и настройка
  • Предопределённые константы
  • Примеры
  • Функции GD и функции для работы с изображениями
    • gd_info — Вывод информации о текущей установленной GD библиотеке
    • getimagesize — Получение размера изображения
    • getimagesizefromstring — Получение размера изображения из строки данных
    • image_type_to_extension — Получает расширение файла для типа изображения
    • image_type_to_mime_type — Получение Mime-типа для типа изображения, возвращаемого функциями getimagesize, exif_read_data, exif_thumbnail, exif_imagetype
    • image2wbmp — Выводит изображение в браузер или записывет в файл
    • imageaffine — Вернуть изображение, содержащее аффинно-преобразованное изображение src, используя дополнительную область ограничения
    • imageaffinematrixconcat — Конкатенирует две аффинные матрицы преобразования
    • imageaffinematrixget — Получает матрицу аффинного преобразования
    • imagealphablending — Устанавливает режим сопряжения цветов для изображения
    • imageantialias — Определяет, применять ли функции сглаживания
    • imagearc — Рисует дугу
    • imageavif — Выводит изображение в браузер или записывет в файл
    • imagebmp — Выводит BMP-изображение в браузер или файл
    • imagechar — Рисование символа по горизонтали
    • imagecharup — Рисование символа вертикально
    • imagecolorallocate — Создание цвета для изображения
    • imagecolorallocatealpha — Создаёт цвет для изображения
    • imagecolorat — Получение индекса цвета пиксела
    • imagecolorclosest — Получает ближайший индекс цвета
    • imagecolorclosestalpha — Получает ближайший индекс цвета с учётом прозрачности
    • imagecolorclosesthwb — Получает индекс цвета с заданными тоном, белизной и затемнением
    • imagecolordeallocate — Разрыв ассоциации переменной с цветом для заданного изображения
    • imagecolorexact — Получает индекс цвета
    • imagecolorexactalpha — Получает индекс цвета и альфа-компонента
    • imagecolormatch — Повышает соответствие цветов палитровой версии изображения truecolor версии
    • imagecolorresolve — Получает идентификатор конкретного цвета или его ближайший аналог
    • imagecolorresolvealpha — Получает идентификатор конкретного цвета и альфа-компонента или его ближайший аналог
    • imagecolorset — Устанавливает набор цветов для индекса палитры
    • imagecolorsforindex — Получение цветов, соответствующих индексу
    • imagecolorstotal — Определяет количество цветов в палитре изображения
    • imagecolortransparent — Определяет цвет как прозрачный
    • imageconvolution — Наложение искривляющей матрицы 3х3, используя коэффициент и смещение
    • imagecopy — Копирует часть изображения
    • imagecopymerge — Копирует часть изображения с наложением
    • imagecopymergegray — Копирует часть изображения с наложением в градациях серого
    • imagecopyresampled — Копирование и изменение размера изображения с ресемплированием
    • imagecopyresized — Копирование и изменение размера части изображения
    • imagecreate — Создаёт новое палитровое изображение
    • imagecreatefromavif — Создаёт новое изображение из файла или URL-адреса
    • imagecreatefrombmp — Создаёт новое изображение из файла или URL-адреса
    • imagecreatefromgd — Создаёт новое изображение на основе GD-файла или URL-адреса
    • imagecreatefromgd2 — Создаёт новое изображение на основе GD2-файла или URL-адреса
    • imagecreatefromgd2part — Создаёт новое изображение на основе части GD2-файла или URL-адреса
    • imagecreatefromgif — Создаёт новое изображение из файла или URL-адреса
    • imagecreatefromjpeg — Создаёт новое изображение из файла или URL-адреса
    • imagecreatefrompng — Создаёт новое изображение из файла или URL-адреса
    • imagecreatefromstring — Создаёт новое изображение из представленного строкой потока
    • imagecreatefromtga — Создаёт новое изображение из файла или URL-адреса
    • imagecreatefromwbmp — Создаёт новое изображение из файла или URL-адреса
    • imagecreatefromwebp — Создаёт новое изображение из файла или URL-адреса
    • imagecreatefromxbm — Создаёт новое изображение из файла или URL-адреса
    • imagecreatefromxpm — Создаёт новое изображение из файла или URL-адреса
    • imagecreatetruecolor — Создаёт новое truecolor-изображение
    • imagecrop — Обрезает изображение до заданного прямоугольника
    • imagecropauto — Обрезает изображение автоматически на основе заданного режима
    • imagedashedline — Рисует пунктирную линию
    • imagedestroy — Уничтожает изображение
    • imageellipse — Рисование эллипса
    • imagefill — Заливает фон
    • imagefilledarc — Рисует и заливает дугу
    • imagefilledellipse — Рисование закрашенного эллипса
    • imagefilledpolygon — Рисует закрашенный многоугольник
    • imagefilledrectangle — Рисует закрашенный прямоугольник
    • imagefilltoborder — Заливает цветом
    • imagefilter — Применяет фильтр к изображению
    • imageflip — Переворачивает изображение в заданном режиме
    • imagefontheight — Получение высоты шрифта
    • imagefontwidth — Получение ширины шрифта
    • imageftbbox — Определяет границы прямоугольного обрамления для текста, который библиотека freetype2 выводит на экран путём рендеринга шрифта
    • imagefttext — Наносит текст на изображение путём рендеринга шрифта библиотекой FreeType 2
    • imagegammacorrect — Применяет гамма-коррекцию к GD-изображению
    • imagegd — Выводит GD-изображение в браузер или файл
    • imagegd2 — Выводит GD2-изображение в браузер или файл
    • imagegetclip — Получить отсекающий прямоугольник
    • imagegetinterpolation — Получает метод интерполяции
    • imagegif — Выводит изображение в браузер или записывет в файл
    • imagegrabscreen — Захватывает изображение с экрана
    • imagegrabwindow — Захватывает изображение окна
    • imageinterlace — Включает или выключает интерлейсинг
    • imageistruecolor — Определяет, относится ли изображение к изображениям truecolor
    • imagejpeg — Выводит изображение в браузер или записывет в файл
    • imagelayereffect — Устанавливает флаг альфа-смешивания, чтобы создать эффекты наложения изображений
    • imageline — Рисование линии
    • imageloadfont — Загружает новый шрифт
    • imageopenpolygon — Рисует открытый полигон
    • imagepalettecopy — Копирует палитру из одного изображения в другое
    • imagepalettetotruecolor — Преобразовывает изображение на основе палитры в настоящий цвет
    • imagepng — Выводит PNG-изображение в браузер или файл
    • imagepolygon — Рисует многоугольник
    • imagerectangle — Рисует прямоугольник
    • imageresolution — Получить или установить разрешение изображения
    • imagerotate — Поворачивает изображение с заданным углом
    • imagesavealpha — Определяет, сохранять ли полную информацию альфа-канала при сохранении изображений
    • imagescale — Масштабировать изображение по заданной ширине и высоте
    • imagesetbrush — Устанавливает изображение кисти для рисования линий
    • imagesetclip — Установите прямоугольник ограничения
    • imagesetinterpolation — Устанавливает метод интерполяции
    • imagesetpixel — Рисование точки
    • imagesetstyle — Устанавливает стиль рисования линий
    • imagesetthickness — Устанавливает толщину линий
    • imagesettile — Устанавливает изображение как элемент мозаичной заливки
    • imagestring — Рисует строку текста горизонтально
    • imagestringup — Рисует строку текста вертикально
    • imagesx — Получение ширины изображения
    • imagesy — Получение высоты изображения
    • imagetruecolortopalette — Преобразовывает truecolor-изображение в палитровое
    • imagettfbbox — Определяет границы прямоугольного обрамления для текста, который библиотека freetype2 выводит на экран путём рендеринга шрифта
    • imagettftext — Рисует текст на изображении шрифтом TrueType
    • imagetypes — Возвращает список типов изображений, поддерживаемых PHP сборкой
    • imagewbmp — Выводит изображение в браузер или записывет в файл
    • imagewebp — Вывод WebP-изображение в браузер или файл
    • imagexbm — Выводит XBM-изображение в браузер или в файл
    • iptcembed — Встраивание двоичных IPTC данных в JPEG изображение
    • iptcparse — Разбор двоичных IPTC данных на отдельные теги
    • jpeg2wbmp — Конвертирует изображение из формата JPEG в WBMP
    • png2wbmp — Преобразовывает PNG-файла в файл WBMP
  • GdImage — Класс GdImage
  • GdFont — Класс GdFont
Добавить

Примечания пользователей 5 notes

up
5
mail at ecross dot nl
14 years ago
hello there,
i made a function to create a gradient image.

description:
gradient(int image_width, int image_height,
int start_red, int start_green, int start_blue,
int end_red, int end_green, int end_blue,
bool vertical)

function:
<?php
function gradient($image_width, $image_height,$c1_r, $c1_g, $c1_b, $c2_r, $c2_g, $c2_b, $vertical=false)
{
// first: lets type cast;
$image_width = (integer)$image_width;
$image_height = (integer)$image_height;
$c1_r = (integer)$c1_r;
$c1_g = (integer)$c1_g;
$c1_b = (integer)$c1_b;
$c2_r = (integer)$c2_r;
$c2_g = (integer)$c2_g;
$c2_b = (integer)$c2_b;
$vertical = (bool)$vertical;

// create a image
$image = imagecreatetruecolor($image_width, $image_height);

// make the gradient
for($i=0; $i<$image_height; $i++)
{
$color_r = floor($i * ($c2_r-$c1_r) / $image_height)+$c1_r;
$color_g = floor($i * ($c2_g-$c1_g) / $image_height)+$c1_g;
$color_b = floor($i * ($c2_b-$c1_b) / $image_height)+$c1_b;

$color = ImageColorAllocate($image, $color_r, $color_g, $color_b);
imageline($image, 0, $i, $image_width, $i, $color);
}

# Prints out all the figures and picture and frees memory
header('Content-type: image/png');

if(
$vertical){$image = imagerotate($image, 90, 0);}
ImagePNG($image);
imagedestroy($image);
}
?>
up
3
kurdtpage at gmail dot com
13 years ago
When using GD, please make sure of the following things:

1. The file that is used to manipulate images is saved as ANSI format and not UTF-8
2. There is no space in front of the opening tag <?php
up
1
Thomas
16 years ago
You know, maybe this goes without saying, but I thought I would drop a note in here. When developing code to resize images, it is best not to use GD. When using the current GD methodologies, you are reading content from an image and manipulating it. By then writing that content to a brand new file, you are losing the EXIF data.

For purposes when you want to retain EXIF data, it is recommended that you compile in and use the PECL Imagick extension. It has great resizing methods built right in and the EXIF data is retained.
up
-1
herbert dot walde at googlemail dot com
13 years ago
In case your script is using output-buffering-functions somewhere, then you have to clear the buffer first ( with ob_clear() ), before outputting an image with a function like imagepng().

And you should make sure that no buffer will get send after outputing an image by using the ob_end_flush()-function.

Furthermore you should check if a buffer has already been flushed somewhere before. This can be done using the headers_sent()-function.

Here is the full solution:

<?php
if(headers_sent()){
die(
'Headers have been send somewhere within my script');
}

ob_clean(); //Clears the buffer

header('Content-type: image/png');
imagepng($img, NULL, 0, NULL);

ob_end_flush(); //Now we send the header and image plus we make sure that nothing will get send from now on (including possible shutdown-functions and __destruct()-methods) till the end of page-execution
?>
up
-2
code at ashleyhunt dot co dot uk
16 years ago
I have been looking to send the output from GD to a text string without proxying via a file or to a browser.

I have come up with a solution.

This code buffers the output between the ob_start() and ob_end() functions into ob_get_contents()

See the example below

<?php
// Create a test source image for this example
$im = imagecreatetruecolor(300, 50);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color);

// start buffering
ob_start();
// output jpeg (or any other chosen) format & quality
imagejpeg($im, NULL, 85);
// capture output to string
$contents = ob_get_contents();
// end capture
ob_end_clean();

// be tidy; free up memory
imagedestroy($im);

// lastly (for the example) we are writing the string to a file
$fh = fopen("./temp/img.jpg", "a+" );
fwrite( $fh, $contents );
fclose( $fh );
?>

Enjoy!
Ashley
To Top