Приготовьтесь к огромному посту - да, это вышло из-под контроля ...
Обязательный 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 th пиксель получает значение 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 .
Поддержка программ (Longevity # 2)
Самый популярный и лучший кодек будет недостаточно хорош, если вы не сможете его использовать. И хотя я бы не использовал низшие кодеки только потому, что конкретная программа не поддерживает его, может быть плохим использовать кодек, который должным образом поддерживает только одна программа.
Какие функции мне нужны?
Лично я все еще кодирую большинство своих файлов в формате JPEG - я могу читать их на любом устройстве и едва могу (если вообще могу) увидеть артефакты. 8 бит достаточно для большинства устройств, а альфа-каналы не нужны при просмотре изображений.
Для всех файлов, которые не являются "редактируемыми один раз", я либо сохраняю свои RAW, либо как минимум 16-битные TIFF, чтобы их можно было использовать в будущем.
PSD? DNG
«Документ Photoshop» (PSD) - это формат Photoshop в стиле TIFF. Технически это очень похоже на TIF. Также есть PSB, что то же самое только для файлов размером более 4 ГБ. В этом нет ничего плохого, но лично я предпочитаю TIFF, насколько это возможно.
«Digital Negative» (DNG) - это попытка создать открытый стандарт RAW. Хотя мне нравится эта идея, и она работает довольно хорошо, учтите, что некоторые редакторы RAW имеют с ними проблемы - например, Capture One обычно забывает о балансе белого камеры, устанавливая ползунок на 5000K, независимо от того, что является фактическим значением. Другие программы в прошлом показывали их в виде сплошных белых или розовых изображений или придавали им пурпурный оттенок. Если размер файла вас не беспокоит, вы можете включить исходный файл RAW в свой DNG - если он вам когда-нибудь понадобится, вы можете просто извлечь его снова. Мои 2 цента? Попробуйте это с вашим любимым программным обеспечением - и если оно работает хорошо, используйте это.
Другие форматы?
Поскольку это уже вышло из-под контроля, я не хотел затрагивать еще больше форматов изображений. Однако это не означает, что те, кто не указан, не заслуживают рассмотрения.