Нотатки від команди про майстерність, формати та невеликі рішення, що стоять за добрим результатом.
Контейнер без втрат, що зберігає PNG
PNG спирається на алгоритм стиснення без втрат DEFLATE. Він зберігає значення RGBA кожного пікселя рівно такими, як отримав, застосовує оборотний фільтр до кожного рядка розгортки, і стискає результат варіантом zlib. Без втрат означає, що розпаковані значення пікселів побайтово ідентичні до початкових. У випадку JPG на PNG початковими є пікселі, що утворюються, коли браузер декодує JPEG. Ці декодовані пікселі вже відбивають усі наближення, зроблені JPEG під час початкового кодування, тож PNG сумлінно зберігає наближені пікселі, а не реальну сцену. За вимірами JPEG на 17 КБ за 1024x768 декодується приблизно у 105 КБ як PNG, а JPEG на 116 КБ за 3840x2160 виростає приблизно до 384 КБ. Ці множники тримаються приблизно однаково для різних типів вмісту, бо співвідношення залежить від роздільності, а не від рівня якості JPEG. Контейнер без втрат цінний тим, чому запобігає, подальшій деградації, а не тим, що відновлює.
Чому якість JPEG не можна відновити
Стиснення JPEG відкидає інформацію назавжди. Процес кодування застосовує дискретне косинусне перетворення до блоків 8x8 пікселів, квантує отримані частотні коефіцієнти до меншого набору, і зберігає ці квантовані значення. Крок квантування односторонній, адже коефіцієнт, що був 47 і округлився до 50, потім не можна повернути до 47, і запису про початкове значення у файлі не лишається. Коли браузер декодує JPEG, він реконструює пікселі з квантованих коефіцієнтів, які є наближеннями початкових значень. Перезбирання цих наближених пікселів як PNG дає запис наближень без втрат, тож PNG є досконалим відтворенням деградованого зображення. Це не обмеження PNG чи цього інструмента, це фундаментальна властивість стиснення з втратами, де відкинута під час кодування інформація зникає. Щоб поліпшити якість JPEG, треба починати з нестиснутого оригіналу або файлу RAW.
Виміряне зростання розміру файлу
Співвідношення розмірів від JPG до PNG змінюється залежно від вмісту зображення, але слідує передбачуваному взірцю. Фотографічні зображення зі складною тональною мінливістю ростуть найбільше, бо перетворення JPEG налаштоване саме на такий вміст і досягає високих ступенів стиснення, тоді як стиснення PNG без втрат не дорівняється цим ступеням на шумних піксельних даних. Тестові виміри цього інструмента показують, що світлина JPEG на 17 КБ за 1024x768 дає PNG на 105 КБ, приблизно шестикратне зростання, а світлина JPEG на 116 КБ за 3840x2160 дає PNG на 384 КБ, приблизно у 3,3 раза більше. Для плаского за кольором матеріалу, як знімки екрана й піктограми, JPEG із самого початку погано пасує вмісту і його файли бувають більшими за рівної якості, тож PNG того самого вмісту росте менш різко. Практичний висновок прямий, якщо розмір вихідного файлу важливий для вашого випадку, перетворення JPG на PNG штовхає вас у хибний бік.
Прозорість, можливість проти вмісту
PNG підтримує 8-бітний прозорість як рису контейнера, де файл може містити значення непрозорості на кожен піксель у діапазоні від 0 (повністю прозорий) до 255 (повністю непрозорий). Коли JPG перетворюється на PNG перезбиранням через вбудований рушій зображень платформи, підсумковий PNG стає повністю непрозорим, з кожним пікселем за значенням альфа 255, бо вихідний JPG із самого початку не мав жодної інформації про прозорість. Формат PNG готовий зберігати прозорість, файл просто жодної не містить, бо жодної не було у джерелі. Додавання прозорості до зображення вимагає окремої обробки, чи то маскування фону в редакторі, чи автоматичного кроку вилучення фону. Інструмент вилучення фону, навчений розпізнавати об'єкт, може видати PNG зі справжньою альфою, обнуливши значення альфа на пікселях фону після перетворення.
Обробка метаданих EXIF
Конвеєр перезбирання прибирає метадані EXIF, IPTC і XMP з вихідного PNG в усіх браузерах. Це означає, що координати GPS, модель камери, дата зйомки, рядки авторських прав і будь-які власні поля XMP, наявні у вихідному JPG, вилучаються. Колірні профілі ICC ідуть трохи іншим шляхом, де Chrome і Safari зберігають позначку профілю ICC sRGB на виході, а Firefox прибирає її разом з усіма іншими метаданими. Практичний підсумок це вихід, безпечний за sRGB, у різних браузерах, але широкоохватні профілі на кшталт Display-P3 чи Adobe RGB губляться у Firefox. Для більшості завдань вебу й обміну вилучення метаданих корисне, адже трохи зменшує розмір виходу й прибирає дані про місцеперебування зі світлин. Для професійної фотографії чи архівних процесів, де вбудовані метадані треба зберігати, ведіть ланцюг метаданих окремим інструментом до або після перетворення формату.
Приватність на практиці
Де відбувається перетворення, залежить від кількості файлів. Для одного зображення жодні дані не залишають браузер, і це перевірно в реальному часі. Список лишається порожнім під час кодування. Для двох або більше файлів RoundCut надсилає їх на наш сервер, який перетворює, пакує результат і повертає посилання для завантаження. Це посилання і перетворені файли видаляються приблизно за 2 години. Шлях одного зображення йде цілком на вашому пристрої, поза мережею, тоді як пакетний шлях міняє це на зручність перетворити багато файлів за раз. Для зображень із чутливим вмістом, як знімок особистого документа або фото з даними розташування, перетворення по одному тримає все локально.