//
Основы использования GD (part 1) - предлагаю в FAQ
GD
!!! позволяет создавать и работать с файлами изображений в различных форматах включая GIF, PNG, JPEG, WBMP, и XPM. Что более удобно, PHP позволяет выводить изображение в потоке непосредственно в браузер.
- gd_info(): array возвращает информацию о версии и возможностях установленной GD библиотеки:
123456789101112{"GD Version": "2.3.2","FreeType Support": true,"FreeType Linkage": "with freetype","GIF Read Support": true,"GIF Create Support": true,"JPEG Support": true,"PNG Support": true,"WebP Support": true,"BMP Support": true,...}
//
Инициация
//
- imagecreate(int $width, int $height): GdImage|false
возвращает идентификатор изображения, представляющего из себя пустое изображение заданного размера - imagecreatetruecolor(int $width, int $height): GdImage|false
возвращает объект, представляющий чёрное изображение заданного размера. - imagecreatefrompng(string $filename): GdImage|false
imagecreatefrompng() возвращает идентификатор изображения, представляющего изображение полученное из файла с заданным именем. - imagecreatefromstring()
12$raw = file_get_contents( $URL );$img = imagecreatefromstring( $raw );
- //
Вывод
//
1 2 3 |
header( 'Content-type: image/png' ); imagepng( $image ); imagedestroy( $image ); |
//
Чтобы экспортировать изображение в строку, нужно воспользоваться механизмом
буферизации вывода:
1 2 3 |
ob_start(); imagepng( $image ); $raw = ob_get_clean(); |
//
- imagegif(GdImage $image, resource|string|null $file = null): bool создаёт из изображения image GIF файл file
- imagepng( GdImage $image, resource|string|null $file = null, int $quality = -1, int $filters = -1 ): bool выводит или сохраняет PNG изображение image
- quality сжатие от минимального 0 до 9; по умолчанию -1 устанавливает zlib-сжатие
- filters значение системной библиотекой libgd игнорируется
- imagewebp(GdImage $image, resource|string|null $file = null, int $quality = -1): bool выводит или сохраняет WebP
- quality качество от худшего 0 до 100
Опции вывода
//
- imageinterlace(GdImage $image, ?bool $enable = null): bool переключает состояние бита интерлейсинга для прогрессивного кодирования GIF JPG
Свойства
//
- imagesx(GdImage $image): int
Возвращает ширину заданного изображения image - imagesy(GdImage $image): int
Возвращает высоту заданного изображения image - getimagesize(string $filename, array &$image_info = null): array|false
Функция getimagesize() определит размер любого заданного, поддерживаемого изображения и вернёт этот размер вместе с типом файла и текстовой строкой height/width, которую можно будет использовать внутри тега HTML IMG, а также вернёт соответствующий тип содержимого HTTP
Цвета и стили
//
- imagecolorallocate(
GdImage $image,
int $red,
int $green,
int $blue
): int|falseВозвращает идентификатор цвета в соответствии с заданными RGB компонентами; должна вызываться для создания каждого цвета, который будет использоваться в изображении image. - imagecolorallocatealpha(
GdImage $image,
int $red,
int $green,
int $blue,
int $alpha
): int|false
imagecolorallocatealpha() работает аналогично функции imagecolorallocate(), но ещё добавляет к цвету параметр alpha, отвечающий за прозрачность. - imageantialias(GdImage $image, bool $enable): boolЗадействует механизмы сглаживания при рисовании линий и замкнутых многоугольников. Не поддерживает альфа компоненты. Использует операции прямого смешивания цветов. Работает только с truecolor-изображениями. Стили и толщина не поддерживаются. Использование сглаженных примитивов совместно с прозрачным фоном может дать неожиданный результат. Метод смешивания использует цвет фона наравне с любым другим цветом. Отсутствие поддержки альфа компонента не позволяет применять основанный на нем метод сглаживания
- imagesetthickness(GdImage $image, int $thickness): bool задаёт значение толщины линий для рисования отрезков, прямоугольников, многоугольников, эллипсов и т.п. в thickness пикселов
- imagesetstyle(GdImage $image, array $style): bool
imagesetstyle() задаёт стиль, который будет использоваться функциями рисования линий (такими как imageline() и imagepolygon()) при задании специального цвета IMG_COLOR_STYLED или IMG_COLOR_STYLEDBRUSHED
Прозрачность
//
- imagecolorallocatealpha( GdImage $image, int $red, int $green, int $blue, int $alpha ): int|false аналогична imagecolorallocate(), и добавляет к цвету параметр alpha, отвечающий за прозрачность
- imagealphablending(GdImage $image, bool $enable): bool позволяет использовать режим сопряжения цветов для truecolor-изображений при рисовании. В режиме сопряжения альфа компонент цвета, который передаётся всем функциям рисования, вроде imagesetpixel(), определяет то, насколько сильно цвет нижележащего слоя будет просачиваться через накладываемое изображение. В результате, gd автоматически сопрягает существующий цвет в каждой точке с цветом рисуемого поверх изображения и сохраняет результат сопряжения в изображении. Пикселы, подвергшиеся сопряжению, не обладают свойством прозрачности. В режиме без сопряжения цвет рисуемого поверх изображения пиксела буквально копируется вместе со своим альфа компонентом, заменяя пиксел в исходном изображении. Режим сопряжения недоступен при рисовании на палитровых изображениях.
- imagesavealpha(GdImage $image, bool $enable): bool устанавливает флаг сохранения альфа-канала, применимый для форматов PNG, WebP и AVIF
Чтобы при экспорте в PNG не была потеряна информация об альфа-канале,
нужно добавить перед самим экспортом два вызова специальных функций.
1 2 3 |
imagealphablending( $img, false ); imagesavealpha( $img, true); imagepng( $img ); |
Графические примитивы
//
- imageline( GdImage $image, int $x1, int $y1, int $x2, int $y2, int $color ): bool
рисует линию по двум точкам - imagefilledrectangle(
GdImage $image,
int $x1,
int $y1,
int $x2,
int $y2,
int $color
рисует прямоугольник по двум диагональным точкам - imagepolygon(GdImage $image, array $points, int $color): bool многоугольник
- imagefilledpolygon(GdImage $image, array $points, int $color): bool
- imageopenpolygon(GdImage $image, array $points, int $color): bool аналогичен, но не отображает замыкающий отрезок
- imagefilledellipse(
GdImage $image,
int $center_x,
int $center_y,
int $width,
int $height,
int $color
): bool
Рисует эллипс с центром в заданных координатах изображения image. - imagearc(
GdImage $image,
int $center_x,
int $center_y,
int $width,
int $height,
int $start_angle,
int $end_angle,
int $color
): bool
imagearc() рисует дугу окружности с заданными координатами центра. - imagefilledarc(
GdImage $image,
int $center_x,
int $center_y,
int $width,
int $height,
int $start_angle,
int $end_angle,
int $color,
int $style
): bool
Рисует дугу с центром в заданных координатах изображения image.
//
Опции
//
- imagesettile(GdImage $image, GdImage $tile): bool задаёт изображение, которое будет использовано в качестве элемента мозаичной заливки функциями imagefill() и imagefilledpolygon() при использовании специального цвета IMG_COLOR_TILED
//
Текст
// !!! использует файл шрифта !!! работает если разместить в том же каталоге и задать имя без расширения .ttf
- imageloadfont(string $filename): GdFont|false
imageloadfont() загружает определённый пользователем шрифт и возвращает его идентификатор. - imagestring(
GdImage $image,
GdFont|int $font,
int $x,
int $y,
string $string,
int $color
): bool
рисует текст string горизонтально от заданных координат - imagettfbbox(
float $size,
float $angle,
string $font_filename,
string $string,
array $options = []
): array|false
Эта функция рассчитывает и возвращает параметры рамки вокруг TrueType текста в пикселах- параметры рамки представляются массивом [ lbx, lby, rbx, rby, rtx, rty, ltx, ltx }
- imagettftext(GdImage $image,float $size, float $angle, int $x, int $y, int $color, string $font_filename, string $text, array $options = []): array|false
//
Размеры и ориентация
//
- imagescale(
GdImage $image,
int $width,
int $height = -1,
int $mode = IMG_BILINEAR_FIXED
): GdImage|false
imagescale() масштабирует изображение, используя заданный алгоритм интерполяции- IMG_NEAREST_NEIGHBOUR,
- IMG_BILINEAR_FIXED,
- IMG_BICUBIC,
- IMG_BICUBIC_FIXED или что-либо ещё (будет использовано два прохода)
- IMG_WEIGHTED4 пока ещё не поддерживается.
- 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
): bool
Копирует часть src_image и помещает скопированное на dst_image, начиная с координат src_x, src_y с шириной src_width и высотой src_height. Скопированная часть помещается на координаты dst_x и dst_y.
Клипы
//
- 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 ): bool
копирует прямоугольную часть одного изображения на другое изображение, интерполируя значения пикселов таким образом, чтобы уменьшение размера изображения не уменьшало его чёткости
Фильтры
//
- imagefilter(GdImage $image, int $filter, array|int|float|bool ...$args): bool
применяет заданный фильтр filter к изображению image- IMG_FILTER_NEGATE: Инвертирует все цвета изображения.
- IMG_FILTER_GRAYSCALE: Преобразует цвета изображения в градации серого путём преобразования компонент красного, зелёного и синего в их сумму с учётом весов, таких же как при вычислении яркости (Y') по REC.601. Альфа-канал сохраняется. Для изображений, использующих палитру, результат может отличаться в виду ограничений, накладываемых палитрой.
- IMG_FILTER_BRIGHTNESS: Изменяет яркость изображения. Используйте аргумент args для задания уровня яркости. Диапазон яркостей от -255 до 255.
- IMG_FILTER_CONTRAST: Изменяет контрастность изображения. Используйте аргумент args для задания уровня контрастности.
- IMG_FILTER_COLORIZE: То же, что и IMG_FILTER_GRAYSCALE, за исключением того, что можно задать цвет. Используйте аргументы args, arg2 и arg3 для указания каналов red, green, blue, а arg4 для alpha канала. Диапазон для каждого канала цвета от 0 до 255.
- IMG_FILTER_EDGEDETECT: Использует определение границ для их подсветки.
- IMG_FILTER_EMBOSS: Добавляет рельеф.
- IMG_FILTER_GAUSSIAN_BLUR: Размывает изображение по методу Гаусса.
- IMG_FILTER_SELECTIVE_BLUR: Размывает изображение.
- IMG_FILTER_MEAN_REMOVAL: Использует усреднение для достижения эффекта "эскиза".
- IMG_FILTER_SMOOTH: Делает границы более плавными, а изображение менее чётким. Используйте аргумент args для задания уровня гладкости.
- IMG_FILTER_PIXELATE: Применяет эффект пикселирования. Используйте аргумент args для задания размера блока и аргумент arg2 для задания режима эффекта пикселирования.
- IMG_FILTER_SCATTER: Применяет эффект рассеивания к изображению, используйте args и arg2 для определения силы эффекта и дополнительно arg3 для применения только к выбранным цветам пикселей.
- imageconvolution( GdImage $image, array $matrix, float $divisor, float $offset ): bool накладывает искривляющую матрицу на изображение, используя заданный коэффициент и смещение (см. phpclub)
-
- matrix матрица 3x3: массив из трёх массивов по 3 значения с плавающей точкой в каждом
- divisor делитель результата искривления, используется для нормализации
- offset смещение цвета
-
Прочие
//
- getimagesize(string $filename, array &$image_info = null): array|false
Функция getimagesize() определит размер любого заданного, поддерживаемого изображения и вернёт этот размер вместе с типом файла и текстовой строкой height/width, которую можно будет использовать внутри тега HTML IMG, а также вернёт соответствующий тип содержимого HTTP.
Источники
phpclub: Основы использования GD (part 1) - предлагаю в FAQ
Источник разъясняет нюансы работы GD, содержит примеры, описание прямого доступа к палитре и ее физической структуры, матричные алгоритмы фильтров размытия, четкости для imageconvolution() и прочее: //phpclub.ru