Як зменшити розмір файлу зображення
Форма вимагає менше ніж 2 MB, а моє фото важить 8 MB. Що саме міняти?
Три важелі, і один із них головний
Будь-який компресор зображень тягне за якусь комбінацію трьох важелів: скільки в зображенні пікселів, скільки деталей кодеру дозволено викинути і в який формат він пише. Люди першим ділом хапаються за повзунок якості, бо саме його кожен інструмент показує першим. І це зазвичай не те місце, з якого варто починати.
Головні тут розміри, бо розмір файлу приблизно пропорційний кількості пікселів, а кількість пікселів росте як квадрат лінійного розміру. Якщо вдвічі зменшити ширину і висоту, лишиться чверть пікселів. Жодна маніпуляція з повзунком якості не дає такого ефекту, і ніщо інше не коштує так мало у сприйнятій якості — за умови, що результат усе ще більший за область, у якій його показуватимуть.
Порахуйте, скільки пікселів вам насправді потрібно
Сучасна камера телефона видає зображення завширшки близько 4000 пікселів. Фотографія на весь екран ноутбука показується десь у 1500–2000 пікселів завширшки, а фотографія всередині статті — часто у 800. Надіслати 4000 пікселів у блок, який показує 800, означає, що близько 96 відсотків пікселів програма читача викине вже після того, як їх завантажили.
| Найдовша сторона | Приблизно пікселів | Частка від оригіналу на 4000 px |
|---|---|---|
| 4000 px | 10,7 мільйона | 100% |
| 2560 px | 4,4 мільйона | 41% |
| 1920 px | 2,5 мільйона | 23% |
| 1280 px | 1,1 мільйона | 10% |
| 800 px | 0,4 мільйона | 4% |
Ці відсотки — арифметика, а не вимір якогось конкретного файлу: стиснутий файл не зменшується точно пропорційно до кількості пікселів. І все ж дивитися спершу треба саме на них, бо вони показують, скільки простору зменшення дає кодеру, перш ніж тому доведеться викидати деталі.
Що робить повзунок якості
У кодері JPEG число якості масштабує таблицю дільників, які застосовують до частотних коефіцієнтів кожного блоку 8×8. Нижча якість означає грубіше ділення, а отже, більше коефіцієнтів заокруглюється до нуля, а отже, менше бітів. Видима ціна з'являється насамперед на різких краях і на плавних градієнтах: ореоли навколо тексту і смуги на небі.
Шкала не лінійна і не порівнянна між форматами. Якість 80 у кодері JPEG, у кодері WebP і в кодері AVIF — це три ніяк не пов'язані числа, які просто мають однаковий діапазон. Оцінюйте результат, дивлячись на нього в повному розмірі, а не довіряючи числу.
Чому цільовий розмір — це пошук, а не налаштування
Жоден кодер не приймає команду «зроби це 500 KB». Він приймає налаштування якості й видає той розмір, який це налаштування дає для конкретного зображення. Тому інструмент, який пропонує вам цільовий розмір, насправді виконує пошук: закодувати, виміряти, підправити якість, закодувати ще раз і зупинитися, коли результат уклався в бюджет або коли досягнуто нижню межу якості.
Саме тому цільовий розмір завжди лише за можливості. Детальна, шумна фотографія високої роздільності може не вкластися в жорсткий бюджет за жодної якості, яку людина погодилася б прийняти, і чесна реакція — зупинитися на нижній межі й сказати, де саме зупинилися, а не йти далі, доки картинка не зіпсується остаточно. Інструменти цільового розміру у FileSlimmer спершу зменшують розміри, потім звужують якість у заданих межах і повідомляють, на якому налаштуванні зупинилися.
Як зробити зображення меншим за 1 MB
Почніть зі зменшення фотографії з телефона до найбільших розмірів, які потрібні одержувачу. Для пошти, форм і звичайних вебсторінок це часто набагато менше за оригінал із камери. Потім закодуйте новий JPEG або WebP на високій, але не максимальній якості, виміряйте результат і поступово знижуйте якість лише тоді, коли файл усе ще більший за 1 MB.
Сама лише якість не визначає, чи опиниться результат нижче 1 MB, бо детальні зображення потребують більше даних, ніж прості. Якщо перший прохід не влучив у ліміт, зменште розміри, перш ніж силувати якість донизу. Так зображення зазвичай виглядає природніше, ніж якщо зберегти кожен піксель і додати виразні блокові артефакти чи ореоли.
Що не допомагає
- Запакувати файл у ZIP. У стиснутих форматах зображень майже не лишилося надлишковості, яку міг би знайти архіватор загального призначення; архів зазвичай відрізняється від оригіналу на похибку заокруглення.
- Перейменувати розширення. Байти від цього не змінюються, а програма, яка читає справжню сигнатуру файлу, просто заплутається.
- Перезберегти JPEG із тією самою якістю. Це другий прохід із втратами: файл не стає відчутно меншим, а картинка стає трохи гіршою.
- Видаляти метадані з фотографії, якщо вам ідеться лише про розмір. Кілька кілобайтів EXIF проти кількох мегабайтів пікселів — це шум. Видаляйте їх заради приватності, і ці причини цілком реальні, але не заради розміру.
Порядок дій, який зазвичай спрацьовує
- Визначте найбільший розмір, у якому зображення взагалі колись показуватимуть, і зменште найдовшу сторону до нього.
- Виберіть формат під вміст: формат із втратами для фотографій, без втрат — для знімків екрана та плоскої графіки.
- Почніть із високої, але не максимальної якості й знижуйте її крок за кроком, доки не помітите пошкоджень, а тоді підніміть на один крок назад.
- Перевірте результат у повному розмірі та на такому екрані, для якого його призначено.
- Якщо він досі завеликий, поверніться до першого кроку. У розмірах майже завжди більше запасу, ніж у якості.
Де це перестає працювати
Деякі зображення опираються всьому цьому. Сканованому документу з дрібним текстом пікселі потрібні, щоб текст лишався читабельним, тож зменшення розміру шкодить одразу, а зниження якості дає саме ті артефакти, через які текст важко читати. Знімок екрана з таблицею має ту саму проблему. Для них правильна відповідь — часто інший формат: без втрат або PDF, а не менша кількість кілобайтів.
А якщо портал відхиляє ваш файл, перевірте, на що саме встановлено обмеження: на розмір файлу чи на розміри в пікселях. Це різні обмеження, і файл, який проходить одне, цілком може не пройти інше.
Інструменти для цього
Джерела
- ITU-T T.81 — quantisation and the JPEG quality scale
- MDN — Image file type and format guide
- MDN — Responsive images and choosing a display width