Как изменить сжатие JPEG изображений в WordPress

Постойте? WordPress автоматически сжимает JPEG изображения? Это вполне может стать новостью для вас. Когда jpeg-изображения будут загружены в WordPress, к ним автоматически применится сжатие в 90% от оригинала. Скорее всего, это было введено для того, чтобы ваши страницы загружались быстрее, а размеры файлов были меньше. Да и, в самом деле, заметите ли вы эти «утраченные» 10% цифровых изображений?

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

Как отключить сжатие JPEG файлов

Если вы хотите полностью отключить сжатие jpeg-файлов, то вам необходимо указать WordPress, что все эти файлы надо загружать в 100% качестве.

Добавьте следующую строку в файл functions.php вашей темы (либо создайте свой функциональный плагин):

add_filter( 'jpeg_quality', create_function( '', 'return 100;' ) );

Этот код полностью отключит jpeg-сжатие на вашем сайте. Однако если вы желаете не отключать его, а лишь несколько его изменить, то в таком случае продолжайте читать статью.

Как увеличить сжатие JPEG файлов

Сжатие ваших изображений сильнее, чем значение по умолчанию, сделает размеры вашего файла еще меньше, что может поднять производительность сайта. Сжатие в 80% и в 85% от оригинала практически не отличаются друг от друга. Важно помнить, что чем меньше процент, тем сильнее будет сжато изображение.

add_filter( 'jpeg_quality', create_function( '', 'return 80;' ) );

Заметьте, что любые изменения, которые вы сделаете, будут применяться только к новым изображениям, загруженным на ваш сайт. WordPress не будет автоматически возвращаться назад и изменять размеры всех загруженных ранее изображений. Если вы желаете обновить все свои миниатюры в новом размере, то в таком случае я советую воспользоваться плагином Regenerate Thumbnails. Он быстро пробежится по всем вашим миниатюрам и выполнит необходимые изменения.

Источник: wpmu.org

Блог про WordPress
Комментарии: 19
  1. Волшебник

    Так jpeg сам по себе вроде бы при сжатии 100% всё равно сжимает. Т.е. к примеру открываем в каком-нибудь редакторе картинок jpg и сохраняем опять в jpg, при сохранении применяется сжатие 100%. Т.е. я хочу сказать, что в общем случае сжатие в 100% это не отсутствие пережатия и запись неизмененного оригинала. Не знаю как в WP с этим правда.

    1. Дмитрий (автор)

      Я так понимаю, что WP применяет к изображениям некоторые фильтры, которые дополнительно ухудшают качество — это как в Photoshop, когда сохраняешь изображение для web, можно выставлять оптимизацию в определенное число процентов от оригинала. При малом числе процентов появляется зашумленность и замыленность, которая заметна глазу.

  2. Волшебник

    Нет, ну в статье то суть была в том, что «полностью отключить сжатие». А я к тому, что установка сжатия в 100% — не есть отключение сжатия. Всё равно ж WP будет пережимать картинки или не будет их трогать?

    1. Дмитрий (автор)

      Имеется в виду 100% качества от оригинала — то есть сам оригинал, без сжатия.

  3. BaNru

    Странно. У меня наверное особенный WP, ибо оригиналы хранятся на сервере.

    Данные настройки применяются к масштабируемым картинкам (миниатюре и промежуточному), а не к оригиналу. И как подметил Волшебник
    — 100% это тоже сжатие. У JPEG формата любые манипуляции с оным приводят к потери качества. 100% != оригинал.

    Раньше была галочка в админке «оставлять оригинал на сервере». Сейчас я её что-то не могу найти, наверное плохо искал. Я так понимаю при любом раскладе на сервере сохраняется оригинал в настоящее время.

    И так как оригинал не трогается (можно проверить элементарно по размеру файла — после любых манипуляций он меняется, даже при 100% компрессии), то смысла устанавливать в 100% нету. Можно поиграться с этим параметром и экспериментальным путем получить наилучшее значение между 80% и 90%, при котором качество картинки сильно не пострадает на глаз. Разница в размере между 90% и 100% может быть в 2-3 раза при не заметном ухудшение качества. В общем это отдельная тема, которая много раз обсуждалась в сети (в частности для фотошопа) и стоит учесть, что разработчики не дураки, поэтому глупо делать 100%.

  4. Волшебник

    Да… по-моему WP в любом случае не трогает оригинал. Я проверил несколько картинок огромного размера, которые хранятся на сервере. Они идентичны оригиналам. При этом никаких настроек я не трогал. Согласен с BaNru, сжатие применяется только к уменьшенным копиям.

    Таким образом данный код не «полностью отключает сжатие» как говорится в статье, а просто задаёт 100%-ный уровень сжатия для уменьшенных изображений.

    1. Дмитрий (автор)

      Оставлю пока так, поскольку так написано в оригинале (хоть это и не совсем верно). Если у человека возникнут похожие вопросы, то он обратится к комментариям и получит ответ. Кстати, это сжатие относится только к JPEG изображениям. Вот код из файла wp-admin/includes/image-edit.php:

      switch ( $mime_type ) {
       case ‘image/jpeg’:
       return imagejpeg( $image, $filename, apply_filters( ‘jpeg_quality’, 90, ‘edit_image’ ) );
       case ‘image/png’:
       return imagepng( $image, $filename );
       case ‘image/gif’:
       return imagegif( $image, $filename );
       default:
       return false;
       } 

      Как видно отсюда, gif и png никак не затрагиваются.

      Еще есть вот такой плагин для оптимизации изображений:

      http://wordpress.org/plugins/ewww-image-optimizer/

      1. Геннадий

        Изменение с 90 на 100 параметра функции apply_filters( ‘jpeg_quality’, 100, ‘edit_image’ ) ); не препятствует уменьшению размера файлов изображений, которые загружаются в Медиабиблиотеку

  5. BaNru

    >Кстати, это сжатие относится только к JPEG изображениям
    Спасибо КЭП
    Это основы.

    JPEG имеет шкалу от 0 до 100, при которых 100 не значит 100% качества, а ниже 50% практически не имеет смысла.
    PNG — от 0 до 9, где 9 самое максимально сжатие. Все уж давно используют де факто 9.
    GIF — не имеет вариантов сжатия (оно там одно по умолчанию), только алгоритмы с цветами и алгоритмы оптимизации, ибо ограничение в 256 цветов (8 бит). Эти же алгоритмы имеются в PNG для 256 и меньшего количества цветов.

  6. Сергей

    Вы лучше подскажите, как сжать уже существующие фотографии на сайте?

  7. елена

    где находится файл functions.php темы ?. Подскажите мне пожалуйста. Я его искала, но не нашла.
    Фотошопом оригинал не корректируется, на любой размер оригинала выдается размытая тухлая картинка, которую стыдно вставлять в блог.
    Плагин отключения сжатия» Disable JPEG Compression»порообовала поставить, активировала- фотки сжаты и по прежнему размыты.

    1. Дмитрий (автор)

      Файл находится в папке с вашей темой на сервере. Доступ к нему можно получить через админку, «Внешний вид — Редактор — Функции темы (functions.php)». Сразу предупреждаю, что если что-то неправильно в него добавить, то тема может перестать работать. Поэтому вы должны иметь доступ к файлам темы на сервере через FTP (на всякий случай). Добавлять строки кода в functions.php надо в самый низ файла.

  8. Катя

    Вопрос как раз по плагинам, которые подгоняют картинки под тему сайта: после смены темы приходилось менять размеры изображений с помощью плагина. Картинок на сайте очень много и после обработки плагином в папке uploads остается много картинок тех размеров, которые мне не нужны, они просто засоряют базу. Как быстро можно удалить эти ненужные копии? Сама пока знаю только два варианта — перезагрузка всех картинок и вручную удаление, что очень долго.

    1. Дмитрий (автор)

      Можно попробовать провести сканирование изображений плагином:

      https://wordpress.org/plugins/cleanup-images/

      Он позволит удалить неиспользуемые версии изображений.

      1. Катя

        Все варианты рассматриваю. Может force regenerate thumbnails

  9. Дмитрий (автор)

    Можно им тоже воспользоваться. Его минус только, что он сильно нагружает блог, поскольку все изображения преобразуются в новый размер за один шаг. Для смены размера есть еще такой плагин: https://wordpress.org/plugins/ajax-thumbnail-rebuild/, но он не удаляет неиспользуемые файлы.

  10. Wedland

    При добавлении строчки:
    add_filter( ‘jpeg_quality’, create_function( », ‘return 100;’ )
    Сайт вернул мне ошибку 503, пришлось бекапить =(

  11. Программист

    Если использовать такой вариант как в статье, WP версии 5.0 (другие не тестировал) выдаст ошибку: function create_function() is deprecate
    Поэтому, лучше использовать более современное решение:

    add_action( ‘jpeg_quality’, ‘mytheme_image_jpeg_quality’ );
    function mytheme_image_jpeg_quality(){
    return 100;
    }

  12. Виктор

    Присоединяюсь, установка уровня в 100 не дает 100% сохранения качества. Изображение остается размытым. Предполагаю что это связано с этим параметром DPI prntscr.com/qkpshs , поскольку если сохранять в фотошопе, то этот параметр равен 96 точек на дюйм.

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

Получать новые комментарии по электронной почте.