оптимизированные PNG в 5 раз больше оригиналов

Вопрос или проблема

Так как я собираюсь добавить более 50 000 фотографий продуктов на сайт в разработке, меня беспокоит генерация и «оптимизация» миниатюр в WordPress. Между WordPress, Woocommerce и моей темой создается 11 дополнительных миниатюрных изображений из каждого оригинала. Я пытаюсь понять, какие из них необходимы, но пока не нашел способа настроить «оптимизацию».

Мои файлы изображений довольно простые, 8-битные PNG-файлы (менее 256 цветов), которые уже оптимизированы в Adobe Illustrator. На скриншоте ниже показаны два изображения: «AAA.png» и «AAAE.png», оба размером 1200 x 1200 пикселей. Вы можете увидеть, что самые близкие по размеру миниатюры превышают исходный размер более чем в 4 и 5 раз.

введите описание изображения здесь

Я пытался настроить «оптимизацию» с помощью этих двух фрагментов кода, добавленных в мой файл functions.php:

add_filter('jpeg_quality', function($arg){return 100;});
add_filter('wp_editor_set_quality', function($arg){return 100;} );

Я пробовал вышеупомянутое, и также пытался:

add_filter('jpeg_quality', function($arg){return 60;});
add_filter('wp_editor_set_quality', function($arg){return 60;} );

и:

add_filter('jpeg_quality', function($arg){return 40;});
add_filter('wp_editor_set_quality', function($arg){return 40;} );

Эти настройки мало повлияли на размеры файлов. Думаю, настройки оптимизации WordPress, которые используют ImageMagick для изменения размера и оптимизации изображений, нацелены на JPG и 24-битные PNG (которые обычно имеют большой размер файлов), но как я могу настроить их для уже оптимизированных 8-битных PNG? Возможно, код WordPress Imagemagick преобразует мои 8-битные PNG в 24-битные PNG (или JPG) до их оптимизации и изменения размера?

Мои 50 000 PNG-файлов размером 1200 x 1200 пикселей составляют около 2,5 ГБ изображений. (Я планирую использовать их как еще меньшие Webp, с PNG в качестве резервных копий). С автоматическими миниатюрами и «оптимизациями» WordPress, эти файлы увеличатся до 53,75 ГБ!

Решения приветствуются.

Вместо того, чтобы разбираться с этим самостоятельно, это отличный случай, когда стоит рассмотреть возможность передачи на аутсорсинг третьей стороне (и также использовать современные форматы, такие как WebP). Например, PicPerf.io или другие плагины оптимизации.

Я в основном нашел ответ на свои вопросы.

WordPress использует библиотеку GD или IMagick (ImageMagick Джона Кристи) для создания миниатюр различных размеров каждый раз, когда изображение загружается в медиатеку WP. В зависимости от вашей темы, того, что у вас есть в WP Dashboard/Settings/Media, и какие плагины у вас есть, может быть от 5 до 25 дополнительных миниатюрных изображений (смотрите скриншот каталога FTP в моем посте выше).

Почему мои оптимизированные исходные 8-битные PNG-файлы увеличивались в четыре раза для меньшей миниатюры?

Оказывается, изменение размера и ресэмплинг PNG не являются сильной стороной ImageMagick. Отличное объяснение можно найти здесь (хотя статья устарела и решение в ней больше не работает): https://www.smashingmagazine.com/2015/06/efficient-image-resizing-with-imagemagick/

Я также читал на форумах ImageMagick, что в основном происходит следующее: команда ImageMagick ‘-resize’ вызывает преобразование 8-битного PNG в 24-битный PNG для изменения размера, что делает его большим по размеру файла.

ImageMagick является частью проблемы, но в моем случае это также и решение.

Начиная с WordPress 5.8, WebP поддерживается по умолчанию, и миниатюры, созданные WP (ImageMagick) из загружаемого WebP, меньше по байтам, чем оригинал, а не увеличиваются в четыре раза (смотрите скриншот).

скриншот каталога FTP

Но как лучше всего конвертировать 50 000 файлов PNG в WebP?

Да, я рассматривал возможность передачи на аутсорсинг или оптимизации изображений в реальном времени с помощью таких плагинов, как PicPerf.io, Smush, Imagify, TinyPNG… но для 50 000 изображений (+ миниатюр) это может стать дорогостоящим. Некоторые решения означали, что как PNG, так и (созданные) WebP изображения находились бы в моем каталоге загрузок. Это означало бы, что эти оригинальные 50 000 изображений, умноженных на количество миниатюр, создаваемых WP при загрузке, увеличились бы вдвое. Проблема с местом на сервере. Возможные замедления базы данных.

В конечном итоге, ни один из этих плагинов не решает проблему создания WP миниатюр большего размера в байтах из исходно загруженных PNG-файлов.

Поэтому, изучив основы ImageMagick в командной строке и прочитав форумы, я придумал следующее:

  1. Перейти в каталог изображений:

    cd ~/Path/to/images/folder

  2. Рекурсивно найти и конвертировать все PNG-изображения в этом каталоге в WebP:

    find . -type f -regex “.*.(jpg|jpeg|png)” -exec mogrify -format webp {} ; -print

  3. После удовлетворения результатами удалить файлы PNG:

    find . -type f -regex “.*.(jpg|jpeg|png)” -exec rm {} ; -print

Три команды, и я могу конвертировать 50 000 PNG (или Jpeg) в WebP-изображения, и так как это выполняется из командной строки, это быстро. И бесплатно.

В моем случае, WebP, созданные с помощью вышеупомянутой команды, были примерно на 25-35% меньше PNG-файлов. Но мои PNG-файлы были уже оптимизированы в Adobe Illustrator (движок ImageReady) в относительно маленькие 8-битные PNG-файлы. Другие могут увидеть большую экономию в размере.

.

Ответ или решение

Оптимизация изображений для веб-сайтов — важная задача, особенно когда речь идет о масштабных проектах с большим количеством графических элементов, таких как 50,000 фото продуктов. В данном случае, проблема заключается в том, что автоматическая оптимизация WordPress приводит к увеличению размера изображений, что противоречит базовой логике оптимизации и ведет к ненужной нагрузке на сервер и увеличению времени загрузки страниц.

Теория:
Во-первых, важно понять, как WordPress и его инструменты обработки изображений, такие как ImageMagick и GD Library, работают с изображениями и почему файлы PNG, которые изначально были оптимизированы, становятся большими. WordPress генерирует разнообразные миниатюры изображений, чтобы адаптировать их под различные устройства и страницы. Этот процесс часто затрагивает и оптимизацию, которая может повлиять на глубину цветности изображения. В случае PNG, которые изначально 8-битные, основная проблема заключается в том, что ImageMagick может преобразовывать их в 24-битные PNG при изменении размера, что, собственно, и увеличивает размер на выходе.

Пример:
Допустим, у вас есть линия арт 8-битных PNG, которые занимают всего 2,5 ГБ на диске. Однако, после того как эти файлы проходят обработку в WordPress, они могут становиться до 53,75 ГБ, что обусловлено их преобразованием и хранением в формате, который плохо сжимается. Это следствие нижеупомянутого решения, используемого по умолчанию:

  • Использование коллекции библиотек и фреймворков, таких как ImageMagick и GD, которые не всегда обладают отличной поддержкой всех форматов.
  • Назначенные параметры преобразования изображений в темы или плагины, которые могут быть некорректно настроены.

Применение:
Для того, чтобы повысить эффективность работы с графикои в вашем проекте, вам следует рассмотреть следующие шаги:

  1. Конфигурация ImageMagick:
    Измените настройки ImageMagick, чтобы при обработке PNG не изменялась глубина цветности. Это можно сделать, изучив команды командной строки и изменив настройки в вашей системе управления сервером.

  2. Использование формата WebP:
    С учётом того, что WordPress поддерживает WebP с версии 5.8, это гораздо более эффективный формат для сетевой графики. Вы можете вручную конвертировать ваши изображения или использовать автоматизированные инструменты, чтобы уменьшить размер файла без потери качества. Используйте следующую команду для конвертации изображений в WebP из командной строки:

    find . -type f -regex ".*.(png)" -exec mogrify -format webp {} \; -print

    Убедитесь в исходных результатах и, если они соответствуют ожиданиям, удалите оригинальные PNG-файлы:

    find . -type f -regex ".*.(png)" -exec rm {} \; -print
  3. Оптимизация процессов:
    Используйте решения API или плагины, такие как Smush, Imagify или TinyPNG, для оптимизации изображений «на лету». Однако важно заметить, что эти решения могут быть затратными и создавать значительную нагрузку на ваш сервер, будь то затраты памяти или сложные алгоритмы сжатия.

В итоге, оптимальная стратегия обработки изображений должна учитывать не только технологические аспекты, такие как выбор инструментов сжатия и конвертирования, но и организационные: понимание того, какие виды изображений и почему будут полезны для вашей системы. Данная стратегия не только оптимизирует загрузку страниц, но и содействует значительным сокращениям в объеме необходимых данных, снижая задержки при высоких нагрузках.

Оцените материал
Добавить комментарий

Капча загружается...