Thumb3x

Современная обработка изображений для MODX 3

Этот компонент был написан, чтобы заполнить пробел в экосистеме MODX 3, где практически отсутствуют современные и надежные инструменты для работы с изображениями. Большинство существующих решений не обновлялись более 10 лет и не используют преимущества новой версии системы.

Ключевые возможности

  • Современные форматы: Конвертация в WebP и AVIF "на лету".
  • Продвинутый движок: В основе лежит высокопроизводительная библиотека Glide 3.0.1.
  • Интеграция с MODX 3: Полная поддержка Источников файлов и системных настроек.
  • Гибкая обработка: Фильтры, эффекты, водяные знаки и точное позиционирование.
  • Поддержка Fenom: Удобный вызов сниппета с передачей параметров в виде массивов.
  • Управление кэшем: Ведение лога сгенерированных файлов в базе данных с удобной таблицей в админке.

Базовый вызов

<img src="[[!Thumb3x? &input=`path/to/image.jpg` &options=`w=300&h=200`]]" alt="">

Основные параметры сниппета

Параметр Альтернатива Описание Пример
input i (Обязательный) Путь к исходному изображению. &input=`image.jpg`
options o Строка или массив (для Fenom) с параметрами обработки для Glide. &options=`w=400&fit=crop`
sourceId ID "Источника файлов" для исходного изображения. По умолчанию используется значение из системных настроек. &sourceId=`2`
watermark Путь к файлу водяного знака. Активирует возможность наложения водяного знака. &watermark=`assets/logo.png`
quality q (Переопределяется `&options`) Качество по умолчанию. &quality=`75`
format fm (Переопределяется `&options`) Формат по умолчанию. &format=`webp`
Важно: Любые параметры (`q`, `fm` и т.д.), указанные внутри строки &options, всегда имеют наивысший приоритет.

Справочник по параметрам обработки (`&options`)

Размеры и ориентация

ПараметрКлючОписаниеПример
ШиринаwШирина итогового изображения в пикселях.w=300
ВысотаhВысота итогового изображения в пикселях.h=200
ВписываниеfitКак вписать изображение. Основные значения: contain, max, stretch, crop.fit=crop
ОбрезкаcropТочное кадрирование: ширина,высота,x,y.crop=200,150,20,50
DPRdprМножитель для Retina-дисплеев. dpr=2 вернет картинку вдвое большего размера.dpr=2
ОриентацияorПоворачивает изображение. Значения: auto, 0, 90, 180, 270.or=90
ОтражениеflipОтражает изображение. Значения: v (вертикально), h (горизонтально), both.flip=h

Коррекция и эффекты

ПараметрКлючОписаниеПример
ЯркостьbriРегулировка яркости (-100 до +100).bri=20
КонтрастностьconРегулировка контрастности (-100 до +100).con=-30
ГаммаgamГамма-коррекция (0.1 до 9.99).gam=2.2
РезкостьsharpУсиление резкости (0 до 100).sharp=10
РазмытиеblurРазмытие по Гауссу (0 до 100).blur=15
ПикселизацияpixelЭффект пикселизации (0 до 1000).pixel=10
ФильтрfiltПрименяет фильтр: greyscale или sepia.filt=greyscale

Фон и рамка

ПараметрКлючОписаниеПример
ФонbgЦвет фона. Формат: RRGGBB.bg=CCCCCC
РамкаborderДобавляет рамку. Формат: ширина,цвет,тип. Тип: overlay или shrink.border=5,000000,overlay

Водяные знаки

ПараметрКлючОписаниеПример
Путьmark(Обязательный) Имя файла водяного знака.mark=logo.png
ШиринаmarkwШирина водяного знака (в px или %).markw=15w
ВысотаmarkhВысота водяного знака (в px или %).markh=50
Отступ XmarkxОтступ по горизонтали (отрицательные значения - от правого края).markx=-20
Отступ YmarkyОтступ по вертикали (отрицательные значения - от нижнего края).marky=-20
ОтступыmarkpadОтступы со всех сторон.markpad=10
ПозицияmarkposПозиция: top-left, center, bottom-right и т.д.markpos=top-left
ПрозрачностьmarkalphaПрозрачность водяного знака (0-100).markalpha=50

Выходной формат

ПараметрКлючОписаниеЗначенияПример
ФорматfmФормат итогового изображения.jpg, png, gif, webp, aviffm=webp
КачествоqКачество для `jpg`, `webp`, `avif`.`0` до `100`q=80

Развернутые примеры вызова

Пример 1: Наложение водяного знака (стандартный вызов MODX)

Задача: Наложить logo.png в правый нижний угол с отступом и полупрозрачностью.

<img src="[[!Thumb3x?
    &input=`portfolio/image-01.jpg`
    &watermark=`assets/watermark/logo.png`
    &options=`w=1200&mark=logo.png&markpos=bottom-right&markpad=30&markalpha=50`
]]" alt="Портфолио с водяным знаком">

Пример 2: Вызов через Fenom

Задача: Сделать то же самое, используя более читаемый синтаксис Fenom с передачей параметров в виде массива.

{* Определяем параметры для Glide в виде массива *}
{var $params = [
    'w' => 1200,
    'h' => 800,
    'mark' => 'logo.png',
    'markpos' => 'bottom-right',
    'markpad' => 20,
    'markalpha' => 60
]}

{* Вызываем сниппет *}
<img src="{'!Thumb3x' | snippet : [
    'input' => 'portfolio/image-01.jpg',
    'watermark' => 'assets/images/logo.png',
    'options' => $params
]}" alt="Изображение с водяным знаком">

Пояснение:

Главное преимущество Fenom здесь — возможность собрать все параметры обработки в аккуратный массив $params, что делает код шаблона намного чище и удобнее для чтения и редактирования.