Przygotuj się na ogromny post - tak, wymknęło się to spod kontroli ...
Obowiązkowe xkcd:
Niestety nie ma prostego „najlepszego” formatu. Niektóre są bardzo dobrze obsługiwane, niektóre oferują ekstremalną wszechstronność, niektóre oferują bezstratną kompresję, ...
Pierwsza część tej odpowiedzi („Funkcje” i „Krótki przegląd formatów”) będzie dotyczyć szczegółów technicznych, natomiast druga część („(Inne) rzeczy do rozważenia”) jest bardziej ukierunkowana na praktyczne aspekty wyboru formatu .
Funkcje:
Należy pamiętać , że włączenie każdego hacka do każdego formatu jest prawie niemożliwe - np. Pliki GIF można zapisać bez kompresji, ignorując tabelę LZW. Dlaczego nie wspominam o tym poniżej? Ponieważ 99% wszystkich GIF-ów, jakie kiedykolwiek spotkałem, używało LZW, ponieważ LZW dzisiaj nie ma wątpliwości co do mocy obliczeniowej, i ponieważ ten post próbuje wyjaśnić sytuację w popularnych sytuacjach, a nie w dziale badań i rozwoju ILM. Fotografowie będą wykorzystywać swoje pliki do archiwizacji, publikowania i drukowania, więc rozważam tutaj te kwestie.
Informacje sprawdzone krzyżowo między odpowiednimi artykułami z Wikipedii, specyfikacjami, porównaniem Wiki i listą wsparcia metadanych 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 | |
Legenda : o
... Opcjonalne; n
... niedostępne; y
... dostępny; D
... głębokość; *
... Spójrz poniżej na odpowiedni tekst.
Krótki przegląd formatów:
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
Legenda : b/c/p
... bitów na kanał (np. R, G, B) na piksel. rzeczy w [ ]
są opcjonalne; ?
... wykształcone zgadywanie / brak wskazówek.
Pliki „bitmap” są kodowane w wierszach i zwykle nie są kompresowane, więc pojedyncze odwrócenie bitów zniszczy tylko jedną linię obrazu, o ile nie odwróci nagłówka, co utrudni dekodowanie - spróbuj sam z HEX redaktor! . Ponieważ nie oferuje (dobrej) kompresji, rozmiary plików są ogromne, ponieważ muszą zapisywać pełne informacje dla każdego piksela. Ze względu na swoją sztywność może być przydatny do długoterminowej archiwizacji.
BPG
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)
Legenda : b/c/p
... bitów na kanał (np. R, G, B) na piksel. rzeczy w [ ]
są opcjonalne; ?
... wykształcone zgadywanie / brak wskazówek.
„Better Portable Graphics” (BPG) wykorzystuje HEVC, które możesz znać z kodeka wideo h.265 . Miał być następcą JPEG, ale nigdy nie stał się wystarczająco popularny. Wraz ze wzrostem HEIF, który jest pod pewnymi względami podobny, ale bardziej popularny, prawdopodobne jest, że HEIF będzie preferowany. HEVC jest znacznie lepszy pod względem kompresji w porównaniu z DCT JPEG - jednak nie wypada dobrze we wszystkich, z wyjątkiem niższych przepływności, ponieważ zwykle jest rozmazany.
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)
Legenda : b/c/p
... bitów na kanał (np. R, G, B) na piksel. rzeczy w [ ]
są opcjonalne; ?
... wykształcone zgadywanie / brak wskazówek.
OpenEXR został zaprojektowany przez Industrial Lights and Magic (ILM) jako pośredni format dla przepływów pracy VFX. Może przechowywać wiele kanałów na bardzo dużych głębokościach bitów, wiele obrazów i metadanych w jednym pliku. Oferuje różne algorytmy kompresji - lub wcale. EXR można porównać z TIFF - EXR oferuje więcej opcji, podczas gdy TIFF jest zdecydowanie bardziej popularny.
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)
Legenda : b/c/p
... bitów na kanał (np. R, G, B) na piksel. rzeczy w [ ]
są opcjonalne; ?
... wykształcone zgadywanie / brak wskazówek.
„Free Lossless Image Format” (FLIF) wykorzystuje bezstratną pochodną kompresji HEVC. FLIF twierdzi, że ma ekstremalne współczynniki kompresji w porównaniu do wszystkich innych formatów w tamtych czasach - podczas gdy moje własne testy sprawiły, że w to uwierzyłem, naprawdę potrzebuje mocy obliczeniowej, aby był użyteczny (kilka minut czasu kodowania dla pojedynczego obrazu 24 MP z hiperwątkiem Heksakor 4,3 GHz nie jest tak dobry: D) . Ponieważ jednak jest to młody kodek, mogą pojawić się ulepszenia. Oferuje wsparcie dla animacji, kanałów alfa, progresywnego dekodowania, a nawet kodowania stratnego (bez utraty generacji po pierwszym kodowaniu). Tylko czas pokaże, czy się powiedzie, i szczerze mówiąc, mam taką nadzieję, ponieważ wydaje się, że oferuje jedno rozwiązanie wielu problemów.
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
Legenda : b/c/p
... bitów na kanał (np. R, G, B) na piksel. rzeczy w [ ]
są opcjonalne; ?
... wykształcone zgadywanie / brak wskazówek.
Podczas gdy „Graphics Interchange Format” (GIF) oferuje 8 bitów na kanał na piksel, zredukuje je do palety 256 kolorów (które mogą obejmować „kolor tła”). Jest on głównie używany do animacji - jedyne, czego PNG nie może zrobić lepiej, ponieważ PNG samo w sobie nie oferuje wsparcia animacji.
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
Legenda : b/c/p
... bitów na kanał (np. R, G, B) na piksel. rzeczy w [ ]
są opcjonalne; ?
... wykształcone zgadywanie / brak wskazówek.
„High Efficiency Image Format” (HEIF) również wykorzystuje kompresję HEVC. Oprócz kanałów kolorów może także zawierać kanał alfa lub mapę głębi (używane w późniejszych programowych efektach głębi ostrości ). Ponadto podstawowa edycja może odbywać się bezstratnie. Zgodnie ze specyfikacjami ma również tryb bezstratnej kompresji. Ponieważ wszystkie główne systemy operacyjne go obsługują, wydaje się, że jest to najbardziej prawdopodobny pretendent do serii JPEG (jeśli taki istnieje).
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
Legenda : b/c/p
... bitów na kanał (np. R, G, B) na piksel. rzeczy w [ ]
są opcjonalne; ?
... wykształcone zgadywanie / brak wskazówek.
„Joint Photographic Experts Group” (JPEG) jest prawdopodobnie najczęściej używanym formatem obrazu na świecie. Wykorzystuje dyskretną transformację cosinus (DCT), która jest stratna. Istnieje bezstratna specyfikacja, ale nie jest używana zbyt często. Niektóre programy mogą bezproblemowo wykonywać pewne podstawowe działania (np. Obrót), ale wymaga to również, aby szerokość i wysokość obrazu były podzielne przez 8 (rozmiar bloku JPEG) - np. 800x640 będzie działać, 804x643 nie. JPEG nie ma opcji zapisywania obrazów w RGB - przekształca obraz w przestrzeń kolorów YCbCr i często zmniejsza informacje o pikselach z 4: 4: 4 (każdy piksel ma wszystkie kanały) do 4: 2: 0 (każdy kanał ma luminancję, ale tylko co 4- ty piksel otrzymuje wartość Cb / Cr). Podobnie jak w przypadku większości konwersji przestrzeni kolorów, może to prowadzić do zauważalnych różnic, szczególnie w ekstremalnych kolorach. JPEG można szybko zakodować i nie jest źle w ustawieniach wysokiej jakości, ale dla mnie powyższe rzeczy nie spowodowałyby, żebym rozpłakał się, gdyby kiedykolwiek zniknął - dobrze nam to służył, ale użyte formaty zdjęć mogą być nieco więcej ... niedawny. W końcu komputery ewoluowały dobrze od 1991 roku.
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)
Legenda : b/c/p
... bitów na kanał (np. R, G, B) na piksel. rzeczy w [ ]
są opcjonalne; ?
... wykształcone zgadywanie / brak wskazówek.
„JPEG 2000” (JP2k lub JP2) jest oficjalnym następcą JPEG. Używa falek zamiast DCT, które oferują mniej blokowych artefaktów i są ogólnie bardziej wszechstronne niż JPEG. Mimo to nigdy tak naprawdę nie dogonił 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)
Legenda : b/c/p
... bitów na kanał (np. R, G, B) na piksel. rzeczy w [ ]
są opcjonalne; ?
... wykształcone zgadywanie / brak wskazówek.
„Rozszerzony zakres JPEG” (JPEG XR, JXR) to kolejna próba sukcesu JPEG. Przestrzeń kolorów YCgCo jest lepsza niż YCbCr, ponieważ jest całkowicie odwracalna. Chociaż niektóre programy obsługują to, to też nigdy nie zbliżyło się do sławy innych formatów.
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
Legenda : b/c/p
... bitów na kanał (np. R, G, B) na piksel. rzeczy w [ ]
są opcjonalne; ?
... wykształcone zgadywanie / brak wskazówek.
„Portable Network Graphics” (PNG) wprowadzono jako następcę formatu GIF. Chociaż jest to projekt bezstratny, pliki PNG można zoptymalizować za pomocą kilku narzędzi, z których niektóre będą kompresować plik w stratny sposób. PNG korzysta z kompresji DEFLATE, więc jest dość wydajny w przypadku grafiki (jak rysunki CAD, zrzuty ekranu, ...), ale mniej wydajny w przypadku zdjęć. Chociaż oferuje obsługę metadanych, niektóre programy mają problemy z ich odczytaniem. Dzięki za heads-up, @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
Legenda : b/c/p
... bitów na kanał (np. R, G, B) na piksel. rzeczy w [ ]
są opcjonalne; ?
... wykształcone zgadywanie / brak wskazówek.
„Truevision TGA” / „TARGA” (TGA) to format fie, który załączyłem tylko dlatego, że wszyscy go znają. Został wprowadzony w 1984 roku. Obsługuje bezstratną kompresję (RLE), która będzie działać dobrze w przypadku grafiki, ale nie tak dobrze w przypadku zdjęć.
SPRZECZKA
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
Legenda : b/c/p
... bitów na kanał (np. R, G, B) na piksel. rzeczy w [ ]
są opcjonalne; ?
... wykształcone zgadywanie / brak wskazówek.
Format „Tagged Image File Format” (TIF lub TIF) istnieje już od dłuższego czasu. Oferuje obsługę warstw (tzn. Wiele obrazów RGBA ułożonych w stos). Pliki TIFF są często używane jako pliki pośrednie, ponieważ są one szeroko obsługiwane i dość elastyczne pod względem swoich możliwości.
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)
Legenda : b/c/p
... bitów na kanał (np. R, G, B) na piksel. rzeczy w [ ]
są opcjonalne; ?
... wykształcone zgadywanie / brak wskazówek.
„WebP” wykorzystuje VP8 (rywalizujący z AVC format open source). Podobnie jak w przypadku BPG, nigdy nie zrobił skoku na urządzenia konsumenckie, choć wydaje się, że jest używany przez wiele usług internetowych.
(Inne) Rzeczy do rozważenia:
Ponowne kodowanie (utrata generacji)
Ponowne kodowanie pliku bezstratnego niczego nie zmieni - ponowne kodowanie pliku stratnego prawie na pewno doprowadzi do powstania artefaktów. JPEG poradzi sobie z tym całkiem dobrze, jeśli zapiszesz plik w tym samym ustawieniu jakości, co wcześniej.
Ten film pokazuje całkiem dobrze utratę generacji - pierwsza klatka pokazuje oryginalny plik, podczas gdy wszystkie inne pokazują kompresję przy różnych ustawieniach jakości. (Pamiętaj, że FLIF jest w trybie stratnym, więc pierwsza klatka będzie wyglądać inaczej).
Artefakty niekoniecznie muszą być wyrokiem śmierci - np. W przypadku szybkiego publikowania w Internecie lub podglądu na urządzeniach mobilnych może nie być tak źle.
Długowieczność kodeka
Pisząc tę odpowiedź, pomyślałem sobie: „kto zresztą dziś używałby TARGA?” i sprawiło, że pomyślałem: nigdy nie zawahałbym się prowadzić samochodu wyprodukowanego w latach 80-tych. Nie zawahałbym się spojrzeć na zdjęcia wykonane w latach 80-tych. Użyłbym kamer wyprodukowanych w tym czasie. Ale nie używałbym tak starego kodeka. Czemu?
Ostatecznie nie ma pewności, czy jeden kodek przetrwa określony okres czasu. Gdyby HEIF jutro zastąpił JPEG na wszystkich urządzeniach konsumenckich, ile czasu zajęłoby programom zaprzestanie obsługi JPEG? Ile pokoleń komputerów - a co ważniejsze: systemów operacyjnych - będzie, zanim nie będzie można ich już otwierać?
Z drugiej strony stosunkowo proste kodeki, takie jak TARGA, wymagają jedynie stosunkowo prostych programów do ich odczytu, podczas gdy współczesne kodeki i ich dekodery mają wiele zależności. Tak więc chociaż prostota jest niekorzystna dla kompresji, może być dobra do archiwizacji w apokaliptycznym scenariuszu. Dzięki @lijat za zwrócenie na to uwagi!
Moim zdaniem, należy wziąć pod uwagę kilka aspektów: Który kodek jest wystarczająco popularny, aby obsługa nie spadła natychmiast? Który kodek jest obsługiwany przez społeczność open source (ponieważ nikt nie zachowa zastrzeżonych formatów z bankrutującej firmy)? Wydaje się również, że przynajmniej co dekadę należy sprawdzić, czy istnieje potrzeba przejścia na nowy, lepiej obsługiwany kodek (patrz „Ponowne kodowanie (utrata generacji)”) - na przykład nie chciałbyś twoja kolekcja TARGA będzie jutro nieczytelna, prawda?
Nawiasem mówiąc, jest to szczególnie niepokojące, gdy myślimy o plikach RAW .
Wsparcie programu (Longevity # 2)
Najpopularniejszy, najlepszy kodek nie będzie wystarczająco dobry, jeśli nie będziesz mógł go używać. I chociaż nie używałbym gorszych kodeków tylko dlatego, że określony program ich nie obsługuje, może być źle używać kodeków obsługiwanych tylko przez jeden program.
Jakich funkcji potrzebuję?
Osobiście nadal koduję większość moich plików w formacie JPEG - mogę je odczytać na dowolnym urządzeniu i ledwo (jeśli w ogóle) widzę artefakty. 8bit jest wystarczający dla większości urządzeń, a kanały alfa nie są tak naprawdę potrzebne podczas oglądania zdjęć.
Dla wszystkich plików, które nie są w stylu „raz edytuj”, zachowuję moje pliki RAW lub co najmniej 16-bitowe pliki TIFF, aby można je było nadal używać w przyszłości.
PSD? DNG?
„Photoshop Document” (PSD) to format w stylu TIFF programu Photoshop. Technicznie jest dość podobny do TIF. Istnieje również PSB, który jest taki sam tylko dla plików o wielkości powyżej 4 GiB. Nie ma nic złego w korzystaniu z niego, ale osobiście wolę TIFF, o ile to możliwe.
„Digital Negative” (DNG) to próba stworzenia otwartego standardu RAW. Chociaż podoba mi się ten pomysł i działa całkiem dobrze, zauważ, że niektóre edytory RAW mają z nimi problemy - np. Capture One zwykle zapomina o balansie bieli aparatu, ustawiając suwak na 5000K, bez względu na to, jaka jest rzeczywista wartość. Inne programy w przeszłości pokazały je jako jednolite białe lub różowe obrazy lub nadały im purpurowy odcień. Jeśli rozmiar pliku nie jest dla Ciebie ważny, możesz dołączyć oryginalny plik RAW do DNG - jeśli kiedykolwiek będziesz go potrzebować, możesz po prostu wyodrębnić go ponownie. Moje 2 centy? Wypróbuj go ze swoim ulubionym oprogramowaniem - a jeśli działa dobrze, użyj go.
Inne formaty?
Ponieważ wymknęło się to spod kontroli, nie chciałem zajmować się jeszcze większą liczbą formatów obrazów. Nie oznacza to jednak, że te, których nie ma na liście, nie są warte rozważenia.