Конспект засобів PHP для роботи із зображеннями

//

Основы использования GD (part 1) - предлагаю в FAQ

GD

!!! позволяет создавать и работать с файлами изображений в различных форматах включая GIF, PNG, JPEG, WBMP, и XPM. Что более удобно, PHP позволяет выводить изображение в потоке непосредственно в браузер.

  • gd_info(): array возвращает информацию о версии и возможностях установленной GD библиотеки:

     

//

Инициация

//

  • imagecreate(int $width, int $height): GdImage|false
    возвращает идентификатор изображения, представляющего из себя пустое изображение заданного размера
  • imagecreatetruecolor(int $width, int $height): GdImage|false
    возвращает объект, представляющий чёрное изображение заданного размера.
  • imagecreatefrompng(string $filename): GdImage|false
    imagecreatefrompng() возвращает идентификатор изображения, представляющего изображение полученное из файла с заданным именем.
  • imagecreatefromstring()

     
  • //

Вывод

//

//

Чтобы экспортировать изображение в строку, нужно воспользоваться механизмом
буферизации вывода:

 

//

  • 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 не была потеряна информация об альфа-канале,
нужно добавить перед самим экспортом два вызова специальных функций.

 

Графические примитивы

//

  • 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

 

 

Leave a Reply