Заметки команды о мастерстве, форматах и небольших решениях, стоящих за хорошей круглой обрезкой.
Контейнер без потерь, что хранит 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 или Araluma, это просто как работает сжатие с потерями, где всё, отброшенное на этапе записи, остаётся отброшенным. Единственный путь к лучшему качеству JPEG это вернуться к несжатому источнику или к файлу RAW.
Измеренный рост размера файла
Насколько JPG раздувается по дороге в PNG, зависит от картинки, но тенденция устойчива. Насыщенные фотографии с богатыми тональными сдвигами растут сильнее всего, потому что именно этот материал JPEG сжимает превосходно, тогда как кодер PNG без потерь не поспевает на столь шумных пикселях. По собственным тестам инструмента, фотография JPEG в 17 КБ при 1024x768 становится PNG в 105 КБ, примерно шестикратный скачок, а фотография JPEG в 116 КБ при 3840x2160 становится PNG в 384 КБ, примерно в 3,3 раза крупнее. Плоский материал вроде скриншотов и значков подходит JPEG плохо изначально и обыкновенно несёт там больше веса, так что его PNG растёт менее резко. Урок прост, если вы гонитесь за меньшим выводом, превращение JPG в PNG толкает вас не туда.
Прозрачность, возможность против содержимого
8-битный альфа-канал PNG это черта контейнера, позволяющая любому пикселю нести непрозрачность от 0 для полностью чистого до 255 для полностью плотного. Когда JPG пересобирается в PNG через движок изображений платформы, каждый пиксель выходит при 255, полностью непрозрачным, потому что JPG не имел прозрачности, чтобы передать её дальше, с самого начала. PNG стоит наготове хранить данные альфы, файл просто никакой не несёт, раз никакой не было у источника. Внесение прозрачности в изображение берёт отдельную операцию, либо маскирование фона вручную в редакторе, либо запуск автоматического удаления фона. Удалятель, настроенный высматривать объект, может выдать PNG с подлинной альфой, выставив непрозрачность пикселей фона в ноль после преобразования.
Обработка метаданных EXIF
Когда файл пересобирается, его теги EXIF, IPTC и XMP отпадают от PNG в каждом браузере, унося с собой координаты GPS, корпус камеры, дату съёмки, текст авторских прав, и любой пользовательский XMP, что держал JPG. Цветовые профили расходятся немного. Chrome и Safari сохраняют тег sRGB на том, что выходит, тогда как Firefox отпускает его со всем остальным. Так что PNG безопасен в sRGB, где бы вы его ни открыли, хотя широкоохватный профиль вроде Display-P3 или Adobe RGB не переживёт Firefox. Для обычного веба и обмена сброс тегов это плюс, срезающий чуть веса и снимающий данные о местоположении с ваших фото. Для профессиональной или архивной работы, что обязана держать встроенные метаданные, ведите эту цепочку специальным инструментом до преобразования формата или после.
Приватность и куда уходит работа
Куда уходит работа, зависит от количества. Для одного изображения ничего не покидает браузер, и проверить это можно вживую за секунды. Откройте DevTools в Chrome, перейдите на панель Сеть, отфильтруйте по XHR и Fetch и конвертируйте файл. Во время кодирования ничего не появляется. Для двух и более Araluma отправляет их на наш сервер, который конвертирует, собирает результат и возвращает ссылку для скачивания. Эта ссылка и конвертированные файлы удаляются примерно за 2 часа. Путь для одного изображения держит всё на устройстве, вне сети, тогда как пакет меняет это на закрытие многих файлов за раз. Для снимка чего-то личного или фото с вашей геометкой конвертация по одному держит это на вашей машине, настоящая разница, а не лозунг.