Рубрики

Полезные материалы

Автоматический оптимизатор изображения для WordPress

Одна из самых больших проблем для скорости каждого сайта - излишне большие изображения.

Я использую отличный плагин в качестве первой помощи на всех своих сайтах Imsanity это позволяет вам установить максимальный размер загружаемых изображений и автоматически уменьшить их.

Я тоже давно его использую TinyPNG - плагин, обеспечивающий действительно хорошее сжатие изображений с помощью API TinyPNG. Сервис работает отлично, но его нужно настраивать для каждого сайта отдельно, или он оплачивается из определенного количества изображений.

Вот почему я создал простой плагин, который использует его для сжатия pngquant и jpegoptim ,

В чем разница между этими картинками?

Один слева имеет размер 2 МБ, другой справа - 412 КБ, такое же разрешение .. :-)

Простой код обеспечивает сжатие:

<? php / * Имя плагина: yotlix.com - URI плагина для сжатия изображений: http://yotlix.com Описание: этот плагин сжимает изображения при загрузке в медиатеку - использует pngquant и jpgotpim Автор: Václav Greif Версия: 1.0 URI автора: https://wp-programator.com/ * / class MW_Compress_Images {function __construct () {add_action ('wp_generate_attachment_metadata', массив ($ this, compress_images '), 10, 2); } / ** * Сжатие изображений * @param $ metadata * @param $ attachment_id * @return mixed * @throws Exception * / function compress_images ($ метаданные, $ attachment_id) {$ images = []; // Получить путь к основному изображению $ image = get_attached_file ($ attachment_id); // Получить путь к изображению $ path = dirname ($ image); // Получить MIME-изображение типа $ mime = mime_content_type ($ image); // Добавить изображение в массив $ images [$ mime] [] = $ image; foreach ($ metadata ['sizes'] как $ size => $ data) {// Добавить все размеры изображений в массив для сжатия $ images [$ data ['mime-type']] [] = $ path. '/'. $ data ['file']; } // Сжимаем PNG if (isset ($ images ['image / png'])) {foreach ($ images ['image / png'] как $ image) {$ compress = $ this-> compress_png ($ image, 80 ); file_put_contents ($ image, $ сжатый); }} // Сжимаем JPG if (isset ($ images ['image / jpeg'])) {foreach ($ images ['image / jpeg'] как $ image) {$ compress = $ this-> compress_jpeg ($ image, 80); file_put_contents ($ image, $ сжатый); }} return $ metadata; } / ** * Оптимизирует файл PNG с pngquant 1.8 или новее (24-битные / 32-битные изображения PNG). * * Вам необходимо установить pngquant 1.8 на сервер (старая версия 1.0 не будет работать). * Есть пакет для Debian / Ubuntu и RPM для других дистрибутивов в http://pngquant.org * * @param $ path_to_png_file string - путь к любому файлу PNG, например, $ _FILE ['file'] ['tmp_name'] * @param $ max_quality int - качество преобразования, полезные значения от 60 до 100 (меньшее число = меньший файл) * @return string - содержимое PNG после преобразования * / function compress_png ($ path_to_png_file, $ max_quality = 90) {if (! file_exists ( $ path_to_png_file)) {выбросить новое исключение («Файл не существует: $ path_to_png_file»); } // гарантируем, что качество не будет хуже этого. $ min_quality = 60; // '-' заставляет его использовать stdout, который требуется сохранить в переменную $ressed_png_content // '<' заставляет его читать по указанному пути к файлу // escapeshellarg () делает его безопасным для использования с любым путем $ сжатый_png_content = shell_exec ("pngquant --quality = $ min_quality - $ max_quality - <". escapeshellarg ($ path_to_png_file)); if (! $ compress_png_content) {throw new Exception ("Не удалось преобразовать в сжатый PNG. Установлен ли pngquant 1.8+ на сервере?"); return $ compress_png_content; } / ** * Оптимизирует файл JPG с помощью jpegoptim * * Вам необходимо установить jpegoptim на сервере * * @param $ path_to_png_file string - путь к любому файлу PNG, например, $ _FILE ['file'] ['tmp_name'] * @param $ max_quality int - качество преобразования, полезные значения от 60 до 100 (меньшее число = меньший файл) * @return string - содержимое PNG после преобразования * / function compress_jpeg ($ path_to_file, $ max_quality = 90) {if (! file_exists ( $ path_to_file)) {выбросить новое исключение («Файл не существует: $ path_to_file»); } $ressed_content = shell_exec ("jpegoptim --max = max_quality --strip - все - все - прогрессивный - <" .escapeshellarg ($ path_to_file)); if (! $ compress_content) {throw new Exception ("Сбой преобразования в сжатый PNG. Установлен ли pngquant 1.8+ на сервере?"); вернуть $ressed_content; }} add_action ('init', 'mw_compress_images_init'); function mw_compress_images_init () {new MW_Compress_Images (); }

Вацлав Грайф занимается программированием для Wordpress более 10 лет. За это время он приобрел большой опыт в создании плагинов Wordpress, редактировании шаблонов и программировании сложных функций. Он посвящает себя программированию для Wordpress и обучению программистов.

На сервере?
На сервере?