Что сохраняется при перекодировании, а что теряется
Файл изображения — это пиксели плюс набор утверждений о них: в каком цветовом пространстве измерены эти числа, есть ли альфа-канал, что камера записала в EXIF — модель, экспозицию, дату, часто координаты GPS, — а в GIF, WebP и AVIF ещё и есть ли в файле больше одного кадра. Почти каждая операция здесь декодирует файл и записывает новый, и у каждого из этих утверждений своя судьба.
Первая развилка — с потерями или без. PNG и BMP хранят точные пиксели, так что их можно пересохранить сто раз, и ничего не изменится. JPG, AVIF и обычный WebP отбрасывают детали, которые глаз плохо замечает, и отброшенное пропадает навсегда: конвертация JPG в PNG его не вернёт, а только остановит дальнейшие потери. Поэтому дважды сохранённый JPEG хуже, чем сохранённый один раз: второе кодирование квантует уже квантованные пиксели, а если между ними изображение обрезали или меняли его размер, новая сетка блоков 8×8 больше не совпадает со старой, и ошибки накапливаются, а не повторяются. По возможности работайте с оригиналом.
Субдискретизация цветности — конкретная причина, по которой скриншот в JPG выглядит неправильно. JPEG обычно хранит яркость в полном разрешении, а цвет — в половинном: на фотографии это незаметно, а на красном тексте или тонкой цветной линии бросается в глаза. Если у вас скриншот, логотип или схема, правильный выбор — PNG или WebP, а не JPG.
Прозрачность нужно куда-то деть. В JPG альфа-канала нет вообще, поэтому «PNG в JPG» и «AVIF в JPG» спрашивают, каким цветом заменить прозрачные пиксели, а не заливают их белым — или чёрным — у вас за спиной. PNG, WebP и AVIF поддерживают полноценный альфа-канал, поэтому «PNG в WEBP» и вырезки из «Удалить фон» сохраняют мягкие края.
EXIF не сохраняется. Каждый инструмент, который перекодирует файл, — конвертация, сжатие, изменение размера, поворот, обрезка — записывает чистый файл без блока EXIF, так что модель камеры, время съёмки и местоположение GPS удаляются. Перед публикацией фото это ровно то, что нужно. Ориентация — единственная часть EXIF, которая влияет на вид, и «Повернуть изображение» обходит её, перемещая сами пиксели, поэтому результат стоит правильно и в программах, которые игнорируют этот флаг, и в тех, что его учитывают.
Цветовые профили конвертируются, а не переносятся. Чтобы отрисовать файл Display P3 или Adobe RGB, браузер декодирует его в sRGB, и записанный обратно файл встроенного профиля не содержит. На обычном экране ничего не меняется; на экране с широким цветовым охватом самые насыщенные цвета обрезаются. «TIFF в JPG» идёт тем же путём, поэтому студийный TIFF в CMYK выходит в RGB, и если цвета проходят цветопробу, такой файл лучше оставить в допечатной программе.
Анимация превращается в неподвижный кадр. Анимированные GIF, WebP и AVIF конвертируются как их первый кадр. Обычно именно этого и ждут от «GIF в PNG», но это стоит знать, прежде чем бросать туда двенадцатисекундный цикл.
Когда браузер действительно не подходит
Эти инструменты созданы, чтобы ваш файл оставался конфиденциальным, и у этого есть цена. Лучше сказать об этом здесь, чем вы обнаружите это посреди работы.
Очень большие изображения. Каждый пиксель хранится в памяти устройства в распакованном виде: 100-мегапиксельное изображение занимает около 400 MB в виде «сырого» RGBA, ещё до всякой обработки. Где-то за этим пределом вкладке не хватает места, а увеличение в 4× упирается в потолок ещё раньше — примерно на результате 6000×6000 на обычном ноутбуке. У настольной программы, которая читает изображение с диска по фрагментам, такого ограничения нет.
RAW с камеры. Файлы CR2, NEF, ARW и DNG — это данные сенсора плюс рецепт проявки, а не готовые снимки, и ничто здесь их не открывает. Сначала экспортируйте JPEG или TIFF из программы для камеры или используйте darktable или RawTherapee — обе бесплатны и справляются с этим гораздо лучше, чем могла бы любая веб-страница.
Цвет для печати. Плашечные цвета, цветоделение CMYK, ICC-намерения рендеринга и экранная цветопроба — область допечатных программ. Мы переводим цвет в sRGB, чтобы браузер мог его отрисовать; управлять им мы не берёмся.
Пакетная обработка и автоматизация. Эти инструменты работают, когда человек нажимает кнопку. Менять размер сорока тысяч фото товаров по расписанию — задача для инструмента командной строки на сервере, и бесплатные здесь превосходны: ImageMagick — почти для чего угодно, libvips — для скорости и экономии памяти на огромных файлах, mozjpeg и oxipng — чтобы выжать последние байты, ffmpeg — для всего, где есть кадры.
У удаления фона есть реальный предел. Модель скачивается один раз, 40–85 MB, и действительно хорошо справляется с чётким объектом, включая волосы и шерсть, и действительно теряется в загромождённой сцене без явного объекта. Никакая локальная вычислительная мощность этого не исправит: это предел самого подхода, и у платных сервисов он такой же.
Как выбрать между похожими инструментами
Сжать изображение или Изменить размер изображения. «Сжать» сохраняет размеры и тратит меньше байт на пиксель. «Изменить размер» меняет размеры, то есть убирает пиксели совсем. Если фото шириной 4000 px должно весить 200 KB, сначала изменить размер, а потом сжать — всегда лучше, чем только сжимать; а изменение размера — без потерь в том смысле, который важен: оставшиеся пиксели корректно пересчитываются, а не ухудшаются.
Изменить размер изображения или Увеличить изображение. Оба меняют размеры, но настроены в противоположные стороны. «Изменить размер» — для уменьшения, с фильтром Lanczos, чтобы детали пережили сжатие. «Увеличить» — для увеличения в 2× и 4×, с последующим повышением резкости по краям, потому что увеличение всегда размывает. Ни тот, ни другой не придумывают детали — на выходе только то, что было в вашем изображении.
Конвертировать в ICO или Генератор favicon. «Конвертировать в ICO» создаёт один файл .ico с версиями 16, 32, 48 и 256 px — это то, что нужно приложению или ярлыку Windows. «Генератор favicon» создаёт весь современный набор — .ico, отдельные PNG, иконку Apple touch, веб-манифест и HTML-теги — в ZIP-архиве, и это то, что нужно сайту.
PNG в WEBP или JPG в AVIF. Оба делают изображения для сайта меньше оригинала, но подходят для разных исходников. WebP сохраняет прозрачность и кодируется мгновенно, поэтому это правильный выбор для скриншотов, логотипов и элементов интерфейса. AVIF сжимает фотографии сильнее — обычно на 40–60 процентов меньше равноценного JPG, — но кодирование AV1 тяжёлое, так что рассчитывайте на несколько секунд на каждое большое фото.
Размыть изображение или Удалить фон. «Размыть» уничтожает информацию в выделенной вами области: лица, номера машин, номера счетов. «Удалить фон» отделяет объект от фона и удаляет фон полностью. Если цель — скрыть данные, а не вырезать объект, размывайте — и используйте крупную пикселизацию для текста, потому что слабую пикселизацию в опубликованных исследованиях удавалось обратить.