Приготовьтесь к огромному посту - да, это вышло из-под контроля ...
Обязательный xkcd:
К сожалению, не существует простого «лучшего» формата. Некоторые из них очень хорошо поддерживаются, некоторые предлагают чрезвычайную универсальность, некоторые предлагают сжатие без потерь, ...
В первой части этого ответа («Особенности» и «Краткий обзор форматов») будет рассказано о технических деталях, а во второй части («(Другие), которые необходимо учитывать») больше внимания уделено практическим аспектам выбора формата. ,
Функции:
Обратите внимание, что практически невозможно включить каждый хак в каждый формат - например, GIF-файлы могут быть сохранены без сжатия, игнорируя таблицу LZW. Почему я не упоминаю об этом ниже? Потому что 99% всех GIF-файлов, с которыми я когда-либо сталкивался, использовали LZW, потому что LZW сегодня - это легкая вычислительная мощь, и потому что этот пост пытается прояснить ситуацию для популярных ситуаций, а не для отдела исследований и разработок ILM. Фотографы будут использовать свои файлы для архивирования, публикации и печати, так что это то, что я рассматриваю здесь.
Информация перепроверена между соответствующими статьями Википедии, спецификациями, сравнением Вики и списком поддержки метаданных exiftool .
| Bits per | | Supported by
Codec | Lossy | Channel | Metadata | Channels | Programs | Good for (IMHO)
-------------------------------------------------------------------------------------------------
BMP | n | <= 8 | - | RGBA | Most propr. & free | Archival
BPG | y | <= 14 | EXIF+XMP | RGBA | |
EXR | o | <= 32 | y(?) | RGBAD | | VFX workflow
FLIF | o* | <= 16 | EXIF+XMP | RGBA | | To be seen
GIF | n | <= 8* | XMP | RGB | Most propr. & free | GIFs ;-)
HEIF | o* | <= 16 | EXIF+XMP | RGB(A/D) | | To be seen
JPEG | y* | <= 8 | EXIF+IPTC+XMP | RGB | ~ all propr. & free | Online; Easy access
JP2K | o | <= 32 | EXIF+IPTC+XMP | RGBA | |
JXR | o | <= 32 | EXIF+IPTC+XMP | RGBA | |
PNG | n | <= 16 | EXIF+IPTC+XMP*| RGBA | Most propr. & free | CAD-drawings; Online
TGA | n | <= 8 | y(?) | RGBA | |
TIFF | o | <= 32 | EXIF+XMP | RGBA | Most propr. & free | Archival; Editing
WebP | o | <= 8 | EXIF+XMP | RGBA | |
Легенда : o
... Необязательно; n
... недоступно; y
... имеется в наличии; D
... Глубина; *
... Посмотрите ниже на соответствующий текст.
Краткий обзор форматов:
BMP
Feature |
-----------------------------------------------------------------
Introduced | 1990
Open + Free | Both per Microsoft's Open Specification Promise
Colorspace | R:G:B[:A] (4:4:4[:4])
b/c/p | 1:0:0[:0], 5:6:5, 8:8:8[:8]
Compression | None [RLE in 5:6:4] (so: lossless)
Maximum Size | 4 GiB
Metadata | [ICC]
OS support | Virtually all OSs with a graphical interface
Легенда : b/c/p
... бит на канал (например, R, G, B) на пиксель. вещи не [ ]
являются обязательными; ?
... обоснованное предположение / без понятия.
Файлы 'Bitmap' кодируются в строках и обычно не сжимаются, поэтому одноразрядное переворачивание уничтожит только одну строку изображения. Пока оно не перевернет заголовок, что усложнит декодирование - попробуйте сами с HEX редактор! , Поскольку он не обеспечивает (хорошее) сжатие, размеры файлов огромны, так как он должен сохранять полную информацию для каждого пикселя. Из-за своей жесткости, это может быть полезно для долгосрочного архивирования.
БПГ
Feature |
---------------------------------------------------------------------
Introduced | 2014
Open + Free | Yes (but HEVC patents might be problematic)
Colorspace | R:G:B[:A] (4:4:4[:4]); Y:Cb:CR[:A] (4:2:0[:4] - 4:4:4[:4]);
| Y:Cg:Co[:A] (4:2:0[:4] - 4:4:4[:4]); C:M:Y:K (4:4:4:4)
b/c/p | 8 - 14
Compression | HEVC (lossy / lossless)
Maximum Size | ?
Metadata | [EXIF]; [ICC]; [XMP]
OS support | Linux, Mac, Windows (at least through browser decoding)
Легенда : b/c/p
... бит на канал (например, R, G, B) на пиксель. вещи не [ ]
являются обязательными; ?
... обоснованное предположение / без понятия.
«Лучшая портативная графика» (BPG) использует HEVC, о чем вы можете узнать из видеокодека h.265 . Он должен был стать преемником JPEG, но никогда не становился достаточно популярным. С появлением HEIF, который в некотором смысле довольно похож, но более популярен, вполне вероятно, что HEIF будет предпочтительным. HEVC намного превосходит по сжатию по сравнению с DCT JPEG - однако, он не очень хорошо сравнивается во всех, кроме более низких скоростей передачи, так как он имеет тенденцию быть размытым.
EXR
Feature |
---------------------------------------------------------------------
Introduced | 1999
Open + Free | Yes
Colorspace | R:G:B[:A][:D] (4:4:4[:4][:4])
b/c/p | <= 32
Compression | [RLE]; [ZIP]; [PIZ]; ... [lossless (usual) / lossy]
Maximum Size | > 4 GiB
Metadata | [Yes (XMP-style)]
OS support | Linux, Mac, Windows (through library)
Легенда : b/c/p
... бит на канал (например, R, G, B) на пиксель. вещи не [ ]
являются обязательными; ?
... обоснованное предположение / без понятия.
OpenEXR был разработан Industrial Lights and Magic (ILM) как промежуточный формат для рабочих процессов VFX. Он может содержать несколько каналов с очень большой разрядностью, несколько изображений и метаданные в одном файле. Он предлагает различные алгоритмы сжатия - или вообще не использует сжатие. EXR можно сравнить с TIFF - EXR предлагает больше опций, в то время как TIFF гораздо популярнее.
FLIF
Feature |
---------------------------------------------------------------------
Introduced | 2015
Open + Free | Yes
Colorspace | R:G:B[:A] (4:4:4[:4]) (CMYK and YCbCr in ToDo-List)
b/c/p | <= 16
Compression | MANIAC (variant of CABAC, used in AVC/HEVC) (lossless / lossy (1st generation))
Maximum Size | > 4 GiB
Metadata | [EXIF]; [ICC]; [XMP]
OS support | Linux, Mac, Windows (through provided viewer)
Легенда : b/c/p
... бит на канал (например, R, G, B) на пиксель. вещи не [ ]
являются обязательными; ?
... обоснованное предположение / без понятия.
«Свободный формат изображения без потерь» (FLIF) использует производное сжатия HEVC без потерь. FLIF утверждает, что имеет экстремальные коэффициенты сжатия по сравнению со всеми другими форматами того времени - хотя мои собственные тесты заставили меня поверить в это, ему действительно нужна вычислительная мощность (несколько минут времени кодирования для одного 24-мегапиксельного изображения с гиперзаходом) 4,3 ГГц гексакор не так хорош: D) . Однако, поскольку это молодой кодек, могут появиться улучшения. Он предлагает поддержку анимации, альфа-каналов, прогрессивного декодирования и даже кодирования с потерями (без потери генерации после первого кодирования). Только время покажет, удастся ли это, и, честно говоря, я очень на это надеюсь, так как кажется, что оно предлагает единое решение для множества проблем.
GIF
Feature |
---------------------------------------------------------------------
Introduced | 1987
Open + Free | Yes
Colorspace | R:G:B[:A] (4:4:4[:4])
b/c/p | 2 (palette of 256 colors in total)
Compression | LZW (lossless)
Maximum Size | < 4 GiB
Metadata | [XMP]
OS support | Virtually all OSs with a graphical interface
Легенда : b/c/p
... бит на канал (например, R, G, B) на пиксель. вещи не [ ]
являются обязательными; ?
... обоснованное предположение / без понятия.
Хотя «Graphics Interchange Format» (GIF) предлагает 8 бит на канал на пиксель, он уменьшит их до цветовой палитры из 256 цветов (которая может включать «цвет фона»). Он в основном используется для анимации - единственное, что PNG не может сделать лучше, так как сам по себе PNG не предлагает поддержку анимации.
HEIF
Feature |
----------------------------------------------------------------------
Introduced | 2015
Open + Free | No (patents)
Colorspace | ? Y:Cb:Cr[:A/:D] (4:2:0[:4]) ?
b/c/p | <= 16
Compression | HEVC (lossy)
Maximum Size | < 4 GiB
Metadata | [EXIF]; [XMP]
OS support | Linux, Mac, Windows
Легенда : b/c/p
... бит на канал (например, R, G, B) на пиксель. вещи не [ ]
являются обязательными; ?
... обоснованное предположение / без понятия.
«Высокоэффективный формат изображения» (HEIF) также использует HEVC для сжатия. Помимо цветовых каналов, он также может содержать альфа-канал или карту глубины (используется для более поздних программных эффектов глубины резкости ). Кроме того, элементарное редактирование может происходить без потерь. Согласно спецификации, он также имеет режим сжатия без потерь. Поскольку все основные операционные системы поддерживают его, он выглядит наиболее вероятным претендентом на преемственность JPEG (если она вообще есть).
JPEG
Feature |
----------------------------------------------------------------------
Introduced | 1991
Open + Free | Sort of (free library, but patent might apply)
Colorspace | Y:Cb:Cr (4:2:0 (typical) - 4:4:4)
b/c/p | 8
Compression | DCT (lossy)
Maximum Size | < 2 GiB
Metadata | [EXIF]; [ICC]; [IPTC]; [XMP]
OS support | Virtually all OSs with a graphical interface
Легенда : b/c/p
... бит на канал (например, R, G, B) на пиксель. вещи не [ ]
являются обязательными; ?
... обоснованное предположение / без понятия.
«Объединенная группа экспертов в области фотографии» (JPEG) , возможно, является наиболее используемым форматом изображений на сегодняшний день. Он использует дискретное косинусное преобразование (DCT), которое имеет вид с потерями. Существует спецификация без потерь, но она используется не слишком часто. Некоторые программы могут выполнять определенные элементарные действия (например, вращение) без потерь, хотя для этого также необходимо, чтобы ширина и высота изображения делились на 8 (размер блока JPEG) - например, 800x640 будет работать, 804x643 - нет. JPEG не имеет возможности сохранять изображения в RGB - он преобразует изображение в цветовое пространство YCbCr и часто уменьшает информацию о пикселях с 4: 4: 4 (у каждого пикселя есть все каналы) до 4: 2: 0 (у каждого канала есть яркость, но только каждый 4- й пиксель получает значение Cb / Cr), Как и в большинстве преобразований цветового пространства, это может привести к ощутимым различиям, особенно в экстремальных цветах. JPEG быстро кодируется и не так уж и плох в настройках высокого качества, но, по моему мнению, вышеперечисленные вещи не заставили бы меня плакать, если бы он вообще исчез, - он нам хорошо служил, но используемые форматы изображений могли бы быть немного больше ... недавно. В конце концов, компьютеры развивались хорошо с 1991 года.
JP2K
Feature |
----------------------------------------------------------------------
Introduced | 2000 (duh...)
Open + Free | No (patents)
Colorspace | ? Y:Cb:Cr[:A] (4:4:4[:4]) ?
b/c/p | 8 - 32
Compression | Wavelet (lossy / lossless)
Maximum Size | ?
Metadata | [EXIF]; [ICC]; [IPTC]; [XMP]
OS support | Linux, Mac, Windows (at least through viewer programs)
Легенда : b/c/p
... бит на канал (например, R, G, B) на пиксель. вещи не [ ]
являются обязательными; ?
... обоснованное предположение / без понятия.
«JPEG 2000» (JP2k или JP2) является официальным преемником JPEG. Он использует вейвлеты вместо DCT, которые предлагают меньше блочных артефактов и в целом более универсальны, чем JPEG. Несмотря на все это, он никогда не догонял JPEG.
JXR
Feature |
----------------------------------------------------------------------
Introduced | 2009
Open + Free | Yes (Microsoft Open Specification Promise)
Colorspace | Y:Cb:Cr[:A] (4:2:0[:4] - 4:4:4[:4]); Y:Cg:Co[:A] (? 4:2:0[:4] - 4:4:4[:4] ?);
| C:M:Y:K [4:4:4:4]
b/c/p | 8 - 32 (16 for CMYK)
Compression | DCT (lossy / lossless)
Maximum Size | ?
Metadata | [EXIF]; [ICC]; [IPTC]; [XMP]
OS support | Linux, Mac, Windows (at least through viewer programs)
Легенда : b/c/p
... бит на канал (например, R, G, B) на пиксель. вещи не [ ]
являются обязательными; ?
... обоснованное предположение / без понятия.
«Расширенный диапазон JPEG» (JPEG XR, JXR) - еще одна попытка преуспеть в JPEG. Его цветовое пространство YCgCo превосходит YCbCr, потому что оно полностью обратимо. Хотя некоторые программы поддерживают его, оно также никогда не приближалось к славе других форматов.
PNG
Feature |
----------------------------------------------------------------------
Introduced | 1996
Open + Free | Yes
Colorspace | R:G:B[:A] (4:4:4[:4])
b/c/p | 8 - 16
Compression | DEFLATE (lossless)
Maximum Size | ?
Metadata | [EXIF]; [ICC]; [IPTC]; [XMP]
OS support | Virtually all OSs with a graphical interface
Легенда : b/c/p
... бит на канал (например, R, G, B) на пиксель. вещи не [ ]
являются обязательными; ?
... обоснованное предположение / без понятия.
«Портативная сетевая графика» (PNG) была представлена в качестве преемника GIF. Несмотря на то, что PNG-файлы по своей конструкции без потерь, их можно оптимизировать с помощью нескольких инструментов, некоторые из которых сжимают файл с потерями. PNG использует сжатие DEFLATE, поэтому оно довольно эффективно для графики (например, чертежи САПР, скриншоты, ...), но менее эффективно для фотографий. Хотя он предлагает поддержку метаданных, некоторые программы испытывают трудности при их чтении. Спасибо за хедз-ап, @mattdm !
TGA
Feature |
----------------------------------------------------------------------
Introduced | 1984
Open + Free | ? Yes
Colorspace | R:G:B[:A] (4:4:4[:4])
b/c/p | <= 8
Compression | RLE (lossless)
Maximum Size | ? < 2 GiB
Metadata | Rudimentary
OS support | ? Virtually all OSs with a graphical interface
Легенда : b/c/p
... бит на канал (например, R, G, B) на пиксель. вещи не [ ]
являются обязательными; ?
... обоснованное предположение / без понятия.
«Truevision TGA» / «TARGA» (TGA) - это формат, который я включил только потому, что, кажется, все это знают. Он был представлен в 1984 году. Он поддерживает сжатие без потерь (RLE), которое будет работать нормально для графики, но не очень хорошо для фотографий.
TIFF
Feature |
----------------------------------------------------------------------
Introduced | 1986
Open + Free | ? Yes
Colorspace | R:G:B[:A] (4:4:4[:4]); Y:Cb:Cr[:A] (? 4:2:0[:4] - 4:4:4[:4] ?);
| C:M:Y:K (? 4:4:4:4 ?); L:a:b[:A] (? 4:4:4:[A] ?)
b/c/p | 8 - 32
Compression | [LZW (lossless)]; [ZIP (lossless)]; [JPEG (lossy)]
Maximum Size | ?
Metadata | [EXIF]; [ICC]; [XMP]
OS support | Virtually all OSs with a GUI support >= 1 of the compression types
Легенда : b/c/p
... бит на канал (например, R, G, B) на пиксель. вещи не [ ]
являются обязательными; ?
... обоснованное предположение / без понятия.
«Tagged Image File Format» (TIF или TIF) также существует уже давно. Он предлагает поддержку слоев (т.е. несколько RGBA-изображений в стеке). TIFF часто используются в качестве промежуточных файлов, потому что они широко поддерживаются и достаточно гибки с точки зрения их возможностей.
WebP
Feature |
----------------------------------------------------------------------
Introduced | 2010
Open + Free | Yes
Colorspace | R:G:B:A (4:4:4[:4]) lossless; Y:Cb:Cr[:A] (4:2:0[:4]) lossy
b/c/p | 8
Compression | VP8 (lossless / lossy)
Maximum Size | ?
Metadata | [EXIF]; [ICC]; [XMP]
OS support | Linux, Mac, Windows (at least through browser decoding)
Легенда : b/c/p
... бит на канал (например, R, G, B) на пиксель. вещи не [ ]
являются обязательными; ?
... обоснованное предположение / без понятия.
«WebP» использует VP8 (конкурирующий формат с открытым исходным кодом для AVC). Как и в случае с BPG, он никогда не переходил на потребительские устройства, хотя кажется, что он используется многими интернет-сервисами.
(Другое) Что нужно учитывать:
Перекодирование (потеря генерации)
Перекодирование файла без потерь ничего не изменит - перекодирование файла с потерями почти наверняка приведет к появлению артефактов. JPEG может справиться с этим довольно хорошо, если вы сохраните файл в том же качестве, в котором он был сохранен ранее.
Это видео показывает потери генерации довольно хорошо - первый кадр показывает исходный файл, в то время как все остальные показывают повторное сжатие с различными настройками качества. (Обратите внимание, что FLIF находится в режиме с потерями, поэтому первый кадр будет выглядеть по-другому.)
Артефакты не обязательно будут смертным приговором - например, для быстрой публикации в Интернете или предварительного просмотра на мобильных устройствах, это может быть не так уж плохо.
Долговечность кодека
Когда я писал этот ответ, я подумал про себя: «Кто будет использовать TARGA сегодня, в любом случае?» и это заставило меня задуматься: я бы никогда не колебался водить машину, сделанную в 80-х годах. Я не стесняюсь смотреть на снимки, сделанные в 80-х годах. Я бы использовал любые камеры, сделанные в то время. Но я бы не использовал старый кодек. Почему?
В конце концов, нет точного способа определить, выживет ли тот или иной кодек в течение определенного промежутка времени. Если завтра HEIF заменит JPEG на всех потребительских устройствах, сколько времени потребуется программам для прекращения поддержки JPEG? Сколько поколений компьютеров - и что более важно: ОС - будет, прежде чем вы больше не сможете их открыть?
С другой стороны, относительно простые кодеки, такие как TARGA, требуют только относительно простых программ для их чтения, в то время как современные кодеки и их декодеры имеют несколько зависимостей. Таким образом, хотя простота плоха для сжатия, она может быть полезна для архивирования в апокалиптическом сценарии. Спасибо @lijat за указание на это!
На мой взгляд, для этого нужно рассмотреть несколько аспектов: какой кодек достаточно популярен, чтобы поддержка сразу не падала? Какой кодек поддерживается сообществом открытого исходного кода (потому что никто не будет поддерживать проприетарные форматы от обанкротившейся компании)? Кроме того, кажется, что, по крайней мере, каждые десять лет нужно видеть, есть ли необходимость перейти на новый, лучше поддерживаемый кодек (см. «Перекодирование (потеря генерации)») - например, вы не захотите твоя коллекция TARGA будет нечитаемой завтра, верно?
Это, кстати, особенно беспокоит, когда думаешь о файлах RAW .
Поддержка программы (Долголетие № 2)
Самый популярный, лучший кодек не будет достаточно хорош, если вы не можете его использовать. И хотя я бы не использовал низшие кодеки только из-за того, что конкретная программа не поддерживает его, может быть плохо использовать кодек, который должным образом поддерживает только одна программа.
Какие функции мне нужны?
Лично я до сих пор кодирую большинство своих файлов в формате JPEG - я могу читать их на любом устройстве и едва могу (если вообще могу) увидеть артефакты. 8 бит достаточно для большинства устройств, и альфа-каналы не нужны при просмотре изображений.
Для всех файлов, которые не являются «редактируемыми один раз», я либо сохраняю свои RAW, либо как минимум 16-битные TIFF, чтобы они могли использоваться в будущем.
PSD? DNG?
«Photoshop Document» (PSD) - это формат Photoshop в стиле TIFF. Технически это очень похоже на TIF. Также есть PSB, что то же самое, только для файлов размером более 4 ГБ. В этом нет ничего плохого, но лично я предпочитаю TIFF, насколько это возможно.
«Digital Negative» (DNG) - это попытка создать открытый стандарт RAW. Хотя мне нравится эта идея, и она работает довольно хорошо, обратите внимание, что некоторые редакторы RAW имеют с ними проблемы - например, Capture One обычно забывает баланс белого камеры, таким образом устанавливая ползунок на 5000K, независимо от того, что является фактическим значением. Другие программы в прошлом показывали их в виде сплошных белых или розовых изображений или придавали им пурпурный оттенок. Если размер файла вас не беспокоит, вы можете включить исходный файл RAW в свой DNG - если он вам когда-нибудь понадобится снова, вы можете просто извлечь его снова. Мои 2 цента? Попробуйте это с вашим любимым программным обеспечением - и если это работает хорошо, используйте это.
Другие форматы?
Поскольку это уже вышло из-под контроля, я не хотел затрагивать еще больше форматов изображений. Тем не менее, это не означает, что те, которые не перечислены, не стоит рассматривать.