На нашому форумі http://forum.nerusoft.com у 2007 році обговорювали практичну задачу: панорама готова, але файл вийшов завеликим. Як зменшити його обсяг, які параметри стиснення вибрати й чи варто скорочувати кількість кольорів?
До двох кольорів теж можна дійти — питання лише в тому, що залишиться від панорами :) Тому для мене оптимізація завжди мала дві цілі: зменшити файл і не перестаратися так, щоб зображення стало непридатним.
У своїй роботі я використовував Corel PHOTO-PAINT 11. Основних способів було три: змінити розміри в пікселях, колірне представлення або формат і параметри експорту.
1. Розміри в пікселях: скільки деталей справді потрібно
Спочатку визначте, як людина переглядатиме панораму. Для загального уявлення про місцевість і для роздивляння дрібних деталей потрібні різні розміри зображення. Особливо це відчувалося на повільному інтернет-з’єднанні.
У PHOTO-PAINT 11 я діяв так:
- Відкривав фотографію й переходив до Image → Resample.
- Задавав відсоток лінійних розмірів, який потрібно залишити. Серед моїх проб були 75–50% зі збереженням пропорцій.
- Підтверджував зміну й дивився, чи залишилися потрібні деталі.
- Якщо зменшив забагато — повертався через Ctrl+Z і пробував інше значення.
Менше пікселів означає менше сирих даних. Але точний обсяг готового файла залежить також від самого зображення та способу кодування. Оригінал варто тримати окремо, щоб мати з чим порівнювати кожну спробу.
2. Колірна глибина й палітра
Число 256 у розмові про 8-бітну палітру означає кількість можливих індексів кольорів. Повноколірна фотографія під час такого перетворення може втратити плавність градієнтів; застосування дизерингу іноді додає помітну зернистість.
Для зображення 480 × 480 маємо 230 400 пікселів. Обсяг масиву пікселів без стиснення можна порівняти так:
| Представлення | Байтів на піксель | Даних для 480 × 480 |
|---|---|---|
| 8-бітні індекси палітри | 1 | 230 400 байтів |
| 24-бітне RGB | 3 | 691 200 байтів |
| 48-бітне RGB | 6 | 1 382 400 байтів |
У цьому спрощеному розрахунку немає заголовків, палітри, вирівнювання й інших службових даних. Перехід із 48 до 24 біт удвічі скорочує саме колірний масив, а до 8-бітних індексів — у шість разів. Розмір стисненого файла змінюватиметься за іншими співвідношеннями.
У PHOTO-PAINT я відкривав Image → Color Mode, пробував 8-бітний режим і варіанти палітри Optimized та Adaptive. Після перетворення уважно дивився на небо, горизонт і плавні переходи. Якщо результат не влаштовував, повертав зміну й добирав інші параметри.
3. Формат і спосіб стиснення
- BMP. Нестиснений растровий варіант може займати багато місця. Водночас у сімействі BMP є й способи стиснення, зокрема RLE для індексованих зображень.
- TIFF. Контейнер для різних способів кодування. Він може зберігати дані без стиснення або з різними схемами стиснення; втрати й обсяг залежать від конкретного варіанта.
- GIF. Для окремої таблиці використовує палітру до 256 кольорів і стиснення LZW. Саме стиснення зберігає індекси пікселів; втрата кольорів може статися раніше, під час перетворення фотографії на палітру. GIF також підтримує анімацію.
- PNG. Дає стиснення без втрат, підтримує палітру, відтінки сірого, truecolor і прозорість. Для анімації є APNG: його включено до третьої редакції специфікації W3C від 24 червня 2025 року.
- JPEG. Поширений для фотографій DCT-варіант використовує стиснення з втратами. Налаштування експорту дозволяють шукати компроміс між обсягом, деталізацією та артефактами.
GIF і патентна історія LZW
Історичні суперечки навколо GIF стосувалися патентів на алгоритм LZW. W3C вказує, що патент Unisys у США закінчився 20 червня 2003 року, і повідомляє про завершення його дії в низці інших країн. GNU також описує завершення відповідних патентних обмежень. Ця історія не була загальною забороною розміщувати будь-який GIF на вебсторінці.
Мій результат із панорамою в PHOTO-PAINT 11
Для JPEG я використовував File → Save As, а також пробував Export For Web та Image Optimized. У параметрах експорту зазвичай позначав Progressive й Optimized.
Із записаних мною варіантів Sub Format: Standard та Optional для конкретного скрипту панорам спрацював Standard. З іншим варіантом той скрипт працювати не захотів.
Для однієї панорами пробував Compression і Smoothing по 43%. Наскільки пам’ятав, розміри й кількість кольорів при цьому не змінював. Файл зменшився приблизно з 6 МБ до 400 КБ. На горизонті вже було помітно втрату якості, але загалом результат мене влаштував.
Адреса того прикладу: http://3r.kiev.ua/downloads/panorams/bot_sad/.
Значення близько 10–30% у моїх пробах давали менш помітні зміни. Це була шкала параметрів PHOTO-PAINT 11; у конкретному експортері орієнтуйтеся на результат, а не лише на число. Порівнюйте кілька варіантів із незміненим оригіналом і вибирайте найменший файл, який ще зберігає потрібні деталі.
Технічні джерела: специфікація PNG, специфікація GIF89a, W3C про GIF, PNG та LZW, GNU про патентну історію GIF, JPEG 1, опис TIFF у Бібліотеці Конгресу, Microsoft про стиснення бітових зображень.
Немає коментарів:
Дописати коментар