Image Resizer — это мощный инструмент для работы с изображениями, включающий их изменение размеров (resize), сжатие и управление кешем. Этот модуль разработан для администраторов сайтов позволяя оптимизировать изображения для веб-сайта без потери качества, сохраняя минимальный размер файлов.
Модуль стоит всего 50 долларов, и его использование не привязано к какому-либо конкретному домену.
По всем вопросам пишите в Telegram: t.me/snh001
Основные возможности
1. Изменение размеров изображений
- Поддержка изменения ширины и высоты изображений с сохранением пропорций.
- Возможность указания разрешённых размеров через файл allowed_sizes.txt.
- Если файл пуст, допускаются любые размеры.
2. Сжатие изображений
- Использует библиотеку Imagick для высококачественной обработки.
- Возможность настройки уровня качества сжатия (от 1 до 100).
- Поддержка глубины цвета (8-bit, 24-bit и другие).
- Выбор фильтров ресайза (например, LANCZOS, BOX, TRIANGLE).
3. Поддержка форматов
- Автоматическое определение форматов изображений: JPEG, PNG, GIF, WebP.
- Удаление ненужных метаданных для оптимизации размера изображений.
4. Управление кешем
- Обработанные изображения сохраняются в кеше для ускорения повторного доступа.
- Возможность очистки кеша через административную панель.
- Информация о размере кеша и количестве хранимых файлов.
5. Безопасность
- Строгая проверка доступа: модуль работает только на разрешённом домене.
- Исключение обработки внешних URL.
- Защита POST-запросов с использованием CSRF-токенов.
- Проверка наличия и соответствия файлов корневой директории сайта.
Панель администратора
Модуль оснащён удобной административной панелью с двумя вкладками:1. Настройки кеша
- Поле для указания разрешённых размеров изображений (например, 100x100 или 100).
- Информация о текущем размере кеша и количестве файлов.
- Возможность очистки кеша одним кликом.
2. Настройки сжатия
- Поля для ввода уровня качества сжатия и глубины цвета.
- Выбор фильтра для ресайза изображений (LANCZOS, BOX, TRIANGLE).
- Настройки сохраняются без редактирования файлов вручную.
Обработка запросов
Пользователь отправляет запрос с параметрами (ширина, высота, путь к изображению). Модуль проверяет параметры, применяет ограничения, заданные в конфигурации, и возвращает обработанное изображение.Создание кешированных изображений
- Если запрашиваемое изображение уже существует в кеше, оно возвращается напрямую.
- Если изображения нет в кеше, модуль обрабатывает оригинал, изменяет его и сохраняет в кеше.
Управление через административную панель
Администраторы могут:- Изменять настройки сжатия и разрешённых размеров
- Очищать кеш для освобождения места.
Пример использования
HTML:
https://site.com/resize.php?file=/images/sample.jpg&w=300&h=200
- file — путь к изображению.
- w — ширина нового изображения.
- h — высота нового изображения.
Пример конфигурационного файла
JavaScript:
{
"filter": "Imagick::FILTER_LANCZOS",
"quality": 85,
"depth": 24
}
- filter — фильтр ресайза изображения (LANCZOS, BOX, TRIANGLE).
- quality — уровень качества изображения (например, 85).
- depth — глубина цвета (например, 24).
Преимущества модуля
- Скорость загрузки сайта — оптимизированные изображения уменьшают время загрузки страниц.
- Простота настройки — все параметры доступны через административную панель.
- Гибкость — поддержка различных форматов и настроек позволяет адаптировать модуль под любые требования.
- Безопасность — строгая защита от несанкционированного доступа.
Процесс кеширования изображений
- Проверка входных параметров
- Код проверяет входные параметры outputDir, file, w (ширина) и h (высота).
- Убеждается, что запрашиваемый файл принадлежит домену "yourdomain.com" и существует на файловой системе сервера.
- Проверка выходной директории
- Проверяется наличие директории cache (или той, что указана в outputDir).
- Если директория отсутствует, она создаётся с правами 0755.
- Проверка допустимых размеров
- Код считывает файл allowed_sizes.txt для проверки разрешённых размеров.
- Если запрошенные размеры не входят в список допустимых, возвращается сообщение об ошибке.
- Формирование имени кеш-файла
- Имя кеш-файла формируется по следующей схеме
PHP:{$outputDir}/{$width}x{$height}_{$encodedPath}
- $width и $height — запрашиваемые размеры изображения,
- $encodedPath — имя файла, закодированное с помощью md5.
Код:cache/300x200_d41d8cd98f00b204e9800998ecf8427e.webp
- Имя кеш-файла формируется по следующей схеме
- Блокировка файла (locking)
- Для предотвращения конфликтов при одновременной обработке одного и того же файла используется система блокировки.
- Сохранение в кеше
- Если файл уже существует в директории cache, он немедленно загружается и возвращается.
- Если файла нет, он обрабатывается (для создания новых размеров), кешируется и затем возвращается клиенту.
Формат изображений и качество хранения
- Предварительная обработка с использованием библиотеки Imagick
- Изображение обрабатывается библиотекой Imagick.
- Если указана только ширина или высота, второй параметр вычисляется пропорционально (с сохранением aspect ratio).
- Изменение размеров
- Для изменения размеров используется метод resizeImage.
- Параметры фильтрации и качества задаются в файле config.json, включая:
- Тип фильтра (например, FILTER_LANCZOS),
- Качество сжатия (quality),
- Глубину цвета (depth).
- Формат хранения: WebP
- Все изображения сохраняются в формате WebP (setImageFormat('webp')), который обеспечивает высокое качество при небольшом размере файла.
- WebP подходит как для фотографий, так и для графики.
- Удаление метаданных
- Метод stripImage удаляет лишние метаданные (например, EXIF или другую информацию), что уменьшает размер файла.
- На выходе
- Обработанный файл записывается в директорию cache.
- MIME-тип файла устанавливается, чтобы браузер корректно отображал изображение.
Итог
Основные этапы кеширования и хранения изображений:- Анализ и проверка входных параметров.
- Проверка, существует ли файл в кеше.
- Если файла нет, он обрабатывается: изменяются размеры, качество и формат (WebP).
- Закешированный файл сохраняется в выходной директории с именем, закодированным через md5.
- При следующем запросе того же файла он загружается напрямую из кеша.
Модуль стоит всего 50 долларов, и его использование не привязано к какому-либо конкретному домену.
По всем вопросам пишите в Telegram: t.me/snh001
Вложения
Последнее редактирование: