Данный скрипт предназначен для автоматического сжатия изображений форматов PNG и JPEG в заданной директории. Он использует современные утилиты сжатия, обеспечивая уменьшение размера файлов без заметной потери качества. Это особенно полезно для оптимизации веб-сайтов, ускорения загрузки страниц и экономии дискового пространства.
NOTE
Лучшее, на мой взгляд, приложение для сжатия jpg это JPEGmini Pro. Имеет версию cli для серверов. Но к сожалению оно платное. Его результат сжатия 2.2 мб —> 959 кб.
Установка необходимых утилит
Перед запуском скрипта необходимо установить следующие утилиты:
pngquant — инструмент для сжатия PNG-изображений.
zopflipng — утилита для дополнительной оптимизации PNG-файлов от Google.
mozjpeg — оптимизированный JPEG-кодек от Mozilla для сжатия JPEG-изображений.
Автоматическое сжатие изображений: скрипт обрабатывает все PNG и JPEG файлы в заданной директории, за исключением тех, которые помечены для исключения.
Параллельная обработка: использует все доступные ядра процессора для ускорения процесса сжатия.
Избежание повторной обработки: проверяет хеши файлов, чтобы не сжимать уже обработанные или не изменившиеся файлы.
Логирование: записывает информацию об успешных операциях и ошибках в лог-файлы.
Детали работы
Настройка окружения:
Директории:
IMAGE_DIR: основная директория с изображениями (./images).
COMP_DIR: директория для сохранения сжатых изображений (./images/comp).
Потоки обработки: Скрипт автоматически определяет количество доступных процессорных ядер и использует их для параллельной обработки.
Логирование:
Файлы логов:
zip_image_compression.log: журнал успешных операций.
zip_image_error.log: журнал ошибок.
Функции логирования:
log_success: записывает успешные операции.
log_error: записывает ошибки.
Обработка изображений:
Проверка изменений:
Для каждого файла вычисляется MD5-хеш.
Если файл не изменился с момента последней обработки, он пропускается.
Если при предыдущей попытке была ошибка (существует файл с расширением .error), файл пропускается.
Сжатие PNG (process_png):
Использует pngquant для сжатия с качеством 90-100 и максимальной степенью сжатия.
Далее оптимизирует изображение с помощью zopflipng.
Сравнивает размер исходного и сжатого файлов; если размер не уменьшился, сжатый файл не сохраняется.
Сжатие JPEG (process_jpeg):
Использует mozjpeg (cjpeg) для сжатия с качеством 95 и прогрессивной разверткой.
Аналогично проверяет эффективность сжатия перед сохранением.
Параллельная обработка:
Использует команду find для поиска всех изображений требуемых форматов.
Пропускает файлы, содержащие -no-comp в названии, а также файлы в директории comp.
Команда xargs с параметром -P запускает обработку в несколько потоков.
Как использовать скрипт
Подготовка:
Поместите все изображения, которые необходимо сжать, в директорию ./images.
Убедитесь, что установлены все необходимые утилиты.