Заметки команды о мастерстве, форматах и небольших решениях, стоящих за хорошей круглой обрезкой.
Почему фотографические PNG такие большие
PNG обещает записать каждый пиксель, не теряя ни одного, и это обещание дорого обходится на фото. С миллионами мягко смещающихся тонов сжимателю почти нечего предсказывать или схлопывать, так что файл раздувается. Заурядное фото 1600x1200 может сидеть на 3-5 МБ как PNG, но та же самая картинка как JPEG при качестве 85 умещается в 200-400 КБ. Разница сводится к косинусному преобразованию, на которое опирается JPEG, что вырезает изображение на блоки 8x8, сбрасывает высокочастотную детализацию, которую глаз едва регистрирует, и плотно упаковывает то, что осталось. Материал непрерывного тона, то есть почти вся фотография, ужимается драматически. Безупречная точность PNG отрабатывает своё на плоской графике и работах в процессе, но это просто неверная обёртка для фото, которое вы намерены разделить.
Прозрачность и альфа-канал
8-битный альфа-канал позволяет PNG записать любой уровень непрозрачности на пиксель, от полностью прозрачного до полностью плотного. JPG не предлагает такого поля, так что прозрачности негде жить. Когда механизм изображений пересобирает PNG как JPEG, он сначала кладёт картинку поверх выбранной подложки, и эта подложка по умолчанию белая, что ровно и есть причина, по которой сквозные области читаются белыми после. Вывод тупой, прозрачный JPG не может существовать, ведь у формата нет такого понятия. Когда вырезу надо уцелеть, WebP или нетронутый PNG, ваши единственные маршруты. Araluma останавливается на белом как заливке, ведь он сливается с документами, слайдами и витринными карточками, где эти JPG чаще всего оседают.
Замеренная производительность записи
Все эти цифры сняты с Chrome 148 на десктопе Linux, опираясь на собственную запись JPEG браузера. На 0,12 МП миниатюра 400x300 заворачивается примерно за 10-15 мс. Поднимите до 0,78 МП, кадр 1024x768, и он сидит около 13-20 мс. Снимок на 8 МП в 3840x2160 нуждается примерно в 1,4 секунды, и даже монстр на 48 МП в 8000x6000 просит лишь около 1,5 секунды. Писать JPG этак ловко обходит запись PNG той же картинки, и оно начисто обгоняет AVIF, которому надо загрузить отдельный модуль и который может скрипеть 25 секунд на том снимке в 48 МП даже на десктопе. Вместе взятое, это среди самых быстрых маршрутов где угодно в семье конвертации, и оно ничего лишнего не стоит достать, ведь писатель JPEG уже живёт в каждом браузере.
EXIF и обработка метаданных
Пересборка изображения вычищает его метки EXIF, IPTC и XMP из получившегося JPG в каждом браузере, что выметает GPS-координаты, корпус камеры, отметку времени съёмки, текст об авторском праве и любые пользовательские поля, что нёс PNG. Цветовые профили ICC берут отдельный маршрут, где Chrome и Safari держат профиль sRGB на выходе, а Firefox срезает его со всем прочим. Так что JPG безопасен в sRGB везде, но широкоохватная метка вроде Display-P3 или Adobe RGB не пройдёт через Firefox. Если ваш конвейер зависит от удержания всех этих метаданных, ведайте ими специальным инструментом после. Для повседневного веба и обмена потеря меток в радость, подрезая немного веса и вытягивая данные о местоположении из ваших фото.
Когда артефакты JPG заметны
JPEG рассуждает в блоках 8x8. Уроните жёсткий скачок между двумя очень разными цветами внутри одного блока, и сжатие JPEG может лишь набросать его горсткой частотных членов, оставляя звон, слабый ореол светлее или темнее пикселей, обнимающих край. Фотографии прячут это хорошо, ведь их края никогда не остры как бритва, а окружающая микровариация маскирует приближение. Но скриншоты, логотипы, коробки с чёткими границами, буквы или соседние плиты плоского цвета обнажают его при любом качестве, ведь это в точности тот сигнал, с которым математика мучается. Правило пишет себя само, держите скриншоты, логотипы и насыщенную текстом графику подальше от JPG. Оставьте их в PNG или переходите на WebP ради поджарого файла, что обходит звон начисто.
Приватность и куда уходит работа
Куда уходит работа, зависит от количества. Для одного изображения ничего не покидает браузер, и проверить это можно вживую за секунды. Откройте DevTools в Chrome, перейдите на панель Сеть, отфильтруйте по XHR и Fetch и конвертируйте файл. Во время кодирования ничего не появляется. Для двух и более Araluma отправляет их на наш сервер, который конвертирует, собирает результат и возвращает ссылку для скачивания. Эта ссылка и конвертированные файлы удаляются примерно за 2 часа. Путь для одного изображения держит всё на устройстве, вне сети, тогда как пакет меняет это на закрытие многих файлов за раз. Для снимка чего-то личного или фото с вашей геометкой конвертация по одному держит это на вашей машине, настоящая разница, а не лозунг.