Как работают настройки сжатия изображений
Настройки сжатия определяют, насколько изображение жертвует качеством ради меньшего файла. В этом руководстве объясняется, что на самом деле делают число качества, уменьшение цветов PNG и целевой размер файла.
Сжатие без потерь и с потерями
Сжатие без потерь хранит пиксели компактнее и при открытии изображения возвращает точно те же значения. PNG сжимает без потерь, а у WebP есть режим без потерь. Экономия достигается за счёт повторов: однотонные области и повторяющиеся узоры сжимаются хорошо, фотографии и изображения с шумом — плохо.
Сжатие с потерями, которое используется в JPG и обычно в WebP, отбрасывает информацию, которую люди вряд ли заметят. JPG, например, делит изображение на блоки 8 × 8 пикселей и хранит их мелкие детали с меньшей точностью; цвет часто хранится с меньшим разрешением, чем яркость. Отброшенное восстановить нельзя.
Что означает число качества
Число качества, обычно от 1 до 100, — это настройка кодировщика, которая определяет, насколько грубо сохраняются детали. Это не процент от размера исходного файла и не процент исходного качества: JPG, сохранённый с качеством 50, не вдвое меньше по размеру, чем сохранённый с качеством 100. Одно и то же число к тому же значит разное в разных программах и форматах: WebP с качеством 75 — не то же самое, что JPG с качеством 75.
Размер файла уменьшается неравномерно по мере снижения числа. Самые высокие значения требуют гораздо больше места ради малозаметных различий, а самые низкие экономят сравнительно немного и добавляют явные артефакты:
- Блочность: видимые квадраты в JPG, особенно на небе и других гладких участках.
- Звон: ореолы и крапинки вокруг резких краёв и текста.
- Замыливание: мелкая текстура, например трава или волосы, становится плоской — типичный вид WebP с низким качеством.
- Полосы (бандинг): плавные градиенты распадаются на заметные ступени.
Оценивайте результат в реальном размере на важных участках — лицах, тексте и градиентах. Инструмент LeedyBox «Сжатие изображений» начинает с качества 75 и показывает оригинал и результат рядом.
Уменьшение цветов PNG и полосы
Поскольку PNG сжимает без потерь, основной способ сильно уменьшить PNG — сначала сократить число цветов (квантование цветов). Изображение переводится в палитру не более чем из 256 цветов, и каждый пиксель хранит индекс в палитре размером в один байт или меньше вместо трёх-четырёх байтов. Элементы палитры могут быть частично прозрачными, поэтому прозрачность сохраняется.
Это хорошо работает для скриншотов, логотипов, графиков и схем, в которых мало цветов. Фотографии и плавные градиенты, например небо или мягкие тени, содержат тысячи оттенков; при переводе в небольшую палитру градиент превращается в заметные полосы. LeedyBox не применяет дизеринг, которым некоторые инструменты маскируют полосы ценой зернистости и более крупных файлов.
В LeedyBox ползунок качества задаёт наибольший размер палитры PNG: 256 цветов при значении 99, около 130 при значении по умолчанию 75 и 16 при значении 1. При 100 цвета не сокращаются, и PNG только пересжимается. Для фотографий JPG или WebP обычно дают меньший файл с менее заметными искажениями.
Как достигается целевой размер файла
Для форм загрузки с ограничением размера режим «Целевой размер файла» подбирает настройки за вас:
- Для JPG и WebP сначала пробуется качество 95. Если файл получается слишком большим, диапазон от 5 до 95 сужается многократным делением пополам, и сохраняется наибольшее найденное качество, при котором файл укладывается в лимит.
- Для PNG пробуется вариант без потерь, затем 256, 128, 64, 32 и 16 цветов.
- Если ничего не подходит и уменьшение размеров разрешено, каждая сторона уменьшается не менее чем на 10% относительно последнего результата, и поиск повторяется — вплоть до 10% исходных ширины и высоты.
Поскольку качество снижается раньше размеров, при маленьком целевом размере можно получить изображение в полном размере, но с очень низким качеством. Если вы знаете размер отображения, включите и параметр «Также ограничить ширину и высоту», чтобы допустимый размер не расходовался на пиксели, которых никто не увидит. Результат обычно немного меньше целевого значения. LeedyBox считает 1 КБ равным 1024 байтам; некоторые сайты имеют в виду 1000 байт, поэтому оставляйте запас. Если целевой размер недостижим, вы получите наименьший результат и предупреждение.
Когда сжатие не помогает
В изображении, уже сохранённом с умеренным качеством, убирать почти нечего. Повторное кодирование может почти ничего не сэкономить или даже дать файл больше, а каждое кодирование с потерями добавляет новые ошибки поверх старых, поэтому JPG, который снова и снова редактируют и пересохраняют, продолжает терять детали. Храните оригинал, каждый раз сжимайте из него и делайте сжатие последним шагом — после обрезки и изменения размера.
Смена формата тоже таит подводные камни: фотография JPG, сохранённая в PNG, часто становится больше, а скриншот, сохранённый в JPG, может уменьшиться, но вокруг текста появляются ореолы. Если результат не меньше оригинала, инструмент LeedyBox «Сжатие изображений» выбирает для скачивания оригинал; для каждого изображения можно переключиться на сжатый файл.
Побочные эффекты: метаданные и прозрачность
Инструмент LeedyBox «Сжатие изображений» отрисовывает каждое изображение в браузере и кодирует новый файл, поэтому данные EXIF, GPS-координаты, сведения о камере, поля об авторских правах и цветовые профили не переносятся. Это может быть полезно для конфиденциальности, но проверьте, не нужны ли вам сведения об авторе или авторских правах. Изображения с цветовым профилем широкого охвата после этого могут выглядеть немного иначе. Ориентация, записанная камерой, применяется к пикселям, поэтому фотографии остаются в правильном положении.
В JPG нет прозрачности: прозрачные области становятся белыми, а мягкие края смешиваются с белым, что на тёмном фоне выглядит как светлая кайма. Для логотипов и вырезанных объектов оставляйте PNG или WebP; см. руководство о том, почему прозрачный PNG теряет прозрачность в JPG.
Часто задаваемые вопросы
Какое качество выбрать для фотографий?
Начните с 75 и сравните в реальном размере. Повышайте значение, если видите блоки или замыливание на важных участках; понижайте небольшими шагами, если файл должен быть меньше, а изображение по-прежнему выглядит хорошо.
WebP меньше, чем JPG?
Часто — при сопоставимом видимом качестве, но не для каждого изображения. Сравните оба варианта и убедитесь, что площадка, где вы публикуете изображение, принимает WebP.
Что делать сначала — менять размер или сжимать?
Сначала измените размер, если изображение больше, чем будет отображаться; параметр «Также ограничить ширину и высоту» в инструменте сжатия делает и то и другое за один шаг. См. также инструмент «Изменение размера изображений» и руководство «Изменение размера изображений: пиксели, пропорции и DPI».