JPEG XL

wolny, otwartoźródłowy format grafiki rastrowej

JPEG XLformat graficzny obsługujący zarówno kompresję stratną, jak i bezstratną. Zaprojektowano go z myślą, by był lepszy od istniejących formatów rastrowych, a tym samym stał się ich uniwersalnym zamiennikiem[2].

JPEG XL
Ikona formatu
ilustracja
Rozszerzenia pliku

.jxl

Typ MIME

image/jxl[1]

Producent

Joint Photographic Experts Group

Typ

kompresja grafiki rastrowej

Otwarty format?

tak

Strona internetowa

Historia

edytuj

W 2017 roku komitet JTC1/SC29/WG1 (JPEG) ogłosił możliwość składania propozycji (Call for Proposals) na kandydatów na JPEG XL[3].

Format został zamrożony 24 grudnia 2020 r., co oznacza, że obecnie zakodowane pliki będzie można zdekodować w przyszłości[4].

Funkcje

edytuj

Najważniejszymi funkcjami są[5][6]:

  • większy zestaw funkcji i lepsza efektywność kompresji w porównaniu do tradycyjnych formatów graficznych (m.in. JPEG, GIF oraz PNG),
  • dekodowanie progresywne (polepszanie się jakości wizualnej w miarę ładowania kolejnych fragmentów pliku),
  • odwracalne kodowanie plików JPEG oszczędzające ≈20% rozmiaru,
  • bezstratne kodowanie (w tym kanału alfa),
  • algorytmy kompresji przystosowane zarówno do fotografii, jak i sztucznych obrazów,
  • referencyjny koder zoptymalizowany pod percepcję ludzką,
  • obsługa wysokiej głębi bitowej oraz obrazów HDR,
  • wsparcie dla animowanych obrazów,
  • wydajne kodowanie i dekodowanie bez używania wyspecjalizowanego sprzętu,
  • format otwarty, wolny od tantiem z otwartoźródłową implementacją referencyjną[7].

Informacje techniczne

edytuj

JPEG XL został oparty na formacie PIK od Google oraz FUIF od Cloudinary(inne języki), który z kolei powstał na bazie FLIF(inne języki)[8].

Format ten opiera się na dwóch głównych trybach kodowania:

  • VarDCT – używa tego samego algorytmu DCT, co klasyczny JPEG, ale bloki, zamiast być ograniczone do 8×8, występują w różnych rozmiarach (od 2×2 aż po 256×256) oraz kształtach (np. 16×8, 8×32, 32×64), a także mogą używać innych rodzajów transformacji (AFV, Hornuss).
  • Modular – jest odpowiedzialny m.in. za wydajne, bezstratne kodowanie treści. To z jego pomocą zapisywane są dodatkowe kanały (np. alfa, głębokość, temperatura i inne) oraz współczynniki DC (skala 1:8) trybu VarDCT. Możliwa jest w nim również stratna kompresja, dokonywana z pomocą transformacji Haaro-podobnej, nazywanej w JPEG XL „squeeze”. Ma ona progresywne właściwości: w miarę doczytywania danych widać coraz więcej detali. Progresywne ładowanie obrazów zapisanych trybem VarDCT odbywa się między innymi właśnie przez zapisanie współczynników DC trybu VarDCT w trybie modularnym stratnym, działając w tandemie.

Oba tryby mogą wspomagać się dodatkowymi narzędziami, nieznanymi w innych kodekach:

  • modelowanie krzywych do kodowania np. włosów,
  • powtarzające się „łatki” mogące być np. literami tekstu albo „duszkami” grafiki pikselowej,
  • synteza szumu (jest on trudny do zakodowania w obu trybach, więc lepiej jest oszacować jego wartość w koderze, zapisać ją w pliku i zaaplikować szum ponownie w dekoderze).

Stratne ustawienia kodowania z reguły używają przestrzeni barw XYB stworzonej na bazie LMS[9].

JPEG XL potrafi również bezstratnie zakodować już istniejące pliki JPEG do bardziej kompaktowej formy, kopiując bezpośrednio współczynniki bloków DCT z JPEG-a do bloków VarDCT w JPEG XL, zawdzięczając mniejszy rozmiar lepszemu kodowaniu entropijnemu. Kiedyś za bezstratną kompresję plików JPEG był odpowiedzialny Brunsli, odrębny tryb od VarDCT i modularnego, został on jednak porzucony na rzecz uproszczenia specyfikacji i zmniejszenia rozmiaru dekodera o 20%[10].

Predykcja jest wykonywana przy użyciu dekorelatora piksel po pikselu bez dodatkowych informacji, używając sparametryzowanego, samokorygującego, ważonego zestawu predyktorów. Modelowanie kontekstowe obejmuje wyspecjalizowane modele statyczne i potężne modele metadaptacyjne, które uwzględniają błąd lokalny, z sygnalizowaną strukturą drzewa i wyborem predyktorów w zależności od kontekstu. Kodowanie entropijne używa algorytmu LZ77 i może wykorzystywać zarówno rANS (wariant przedziałowy Asymetrycznych Systemów Liczbowych), jak i kodowanie Huffmana (dla prostszych koderów lub w celu zmniejszenia narzutu danych w małych plikach)[potrzebny przypis].

Domyślnie implementacja referencyjna JPEG XL używa ustawień, które pomimo dobrej kompresji wciąż zapewniają jakość obrazu niemal nieodróżnialną od oryginału[11].

Animacje w tym formacie, w przeciwieństwie do formatów typowo filmowych (takich jak H.264 czy VP9), nie używają zaawansowanej kompresji międzyklatkowej, ale (podobnie do GIF) mają do dyspozycji pewne proste narzędzia:

  • klatka może aktualizować tylko część obrazu,
  • obraz może być nie tylko zastąpiony, ale też wmieszany, dodany lub przemnożony[12],
  • aż do 4 klatek[13] może być oznaczonych do przechowywania „łatek” wykorzystywanych w późniejszych klatkach[14].

Oprogramowanie (stan na listopad 2022)

edytuj

Oficjalne wsparcie

edytuj
  • ImageMagick[15] – narzędzie do przetwarzania grafiki rastrowej
  • XnView MP[16] – przeglądarka i edytor grafiki rastrowej
  • MConverter[17] – konwerter plików online
  • Squoosh[18] – konwerter formatów graficznych działający w całości w przeglądarce na bazie WebAssembly
  • gThumb[19] – przeglądarka obrazów na Linuxa
  • ImageGlass[20] – przeglądarka obrazów na Windowsa
  • Affinity Photo[21] – edytor grafiki rastrowej

Nieoficjalne wsparcie

edytuj

Wsparcie testowe

edytuj

Przypisy

edytuj
  1. Provisional Standard Media Type Registry. IANA, 2021-01-28. [dostęp 2021-03-17]. (ang.).
  2. Can JPEG XL Become the Next Free and Open Image Format? - Slashdot. slashdot.org. [dostęp 2021-03-19]. (ang.).
  3. Next-Generation Image Compression (JPEG XL) Final Call for Proposals. 2018-04-23. [dostęp 2021-03-17]. (ang.).
  4. v0.2 JPEG XL Reference Software. 2020-12-24. [dostęp 2021-03-17]. (ang.).
  5. JPEG XL reaches Committee Draft. 2019-08-03. [dostęp 2021-03-17]. [zarchiwizowane z tego adresu (2019-08-03)]. Cytat: The current contributors have committed to releasing it publicly under a royalty-free and open source license. (ang.).
  6. Jyrki Alakuijala, Jon Sneyers, Luca Versari, Jan Wassenberg: JPEG White Paper: JPEG XL Image Coding System. 2021-01. [dostęp 2021-03-17]. (ang.).
  7. JPEG XL Reference Software. [dostęp 2021-03-17]. (ang.).
  8. FLIF - Free Lossless Image Format. 2021-02-09. [dostęp 2021-04-06]. (ang.).
  9. Jyrki Alakuijala i inni, JPEG XL next-generation image compression architecture and coding tools, Andrew G. Tescher, Touradj Ebrahimi (red.), „Applications of Digital Image Processing XLII”, SPIE, 2019, DOI10.1117/12.2529237, ISBN 978-1-5106-2967-7 (ang.).
  10. JPEG XL vs. AVIF - Page 2. encode.su. [dostęp 2021-03-19]. (ang.).
  11. Jon Sneyers: How JPEG XL Compares to Other Image Codecs. 2020-05-26. [dostęp 2021-03-17]. (ang.).
  12. lib/jxl/frame_header.h · 131953af · jpeg / JPEG XL Reference Software · GitLab. 2020-11-10. [dostęp 2021-05-17]. (ang.).
  13. lib/jxl/common.h · 44778c69 · jpeg / JPEG XL Reference Software · GitLab. 2021-05-21. [dostęp 2021-05-22]. (ang.).
  14. lib/jxl/frame_header.h · 131953af · jpeg / JPEG XL Reference Software · GitLab. 2020-11-10. [dostęp 2021-05-17]. (ang.).
  15. ImageMagick - Image Formats. imagemagick.org. [dostęp 2021-03-19]. (ang.).
  16. 0001845: JPEG XL - MantisBT. xnview.com. [dostęp 2021-03-19].
  17. MConverter: Free, Easy-to-Use Online File Converter ⚡. [dostęp 2021-04-06]. Cytat: We can also convert to and from new, more efficient image formats, such as AVIF and JPEG XL. (ang.).
  18. Squoosh. [dostęp 2021-04-06]. (ang.).
  19. gThumb Image Viewer 3.11.3 Adds JPEG XL (.jxl) Support [Ubuntu PPA] | UbuntuHandbook. ubuntuhandbook.org, 2021-04-15. [dostęp 2021-05-17]. (ang.).
  20. Announcing ImageGlass 8.1 - Home | ImageGlass. imageglass.org, 2021-04-17. [dostęp 2021-05-17]. (ang.).
  21. Version 2 of Affinity apps: What’s new? [online], Affinity [dostęp 2022-11-09] (ang.).
  22. GitHub - mirillis/jpegxl-wic: JPEG XL Windows Imaging Component implementation. [dostęp 2021-04-06]. (ang.).
  23. GitHub - yllan/JXLook: JPEG-XL viewer on macOS. [dostęp 2021-04-06]. (ang.).
  24. GitHub - novomesk/qt-jpegxl-image-plugin: Qt plug-in to allow Qt and KDE based applications to read/write JXL images.. [dostęp 2021-04-06]. (ang.).
  25. plugins/gimp/CMakeLists.txt · ff093712 · jpeg / JPEG XL Reference Software · GitLab. 2019-12-27. [dostęp 2021-05-17]. (ang.).
  26. 1178058 - chromium - An open-source project to help move the web forward. - Monorail. chromium.org. [dostęp 2021-03-19]. (ang.).
  27. 1178058 - chromium - An open-source project to help move the web forward. - Monorail [online], bugs.chromium.org [dostęp 2022-11-23].
  28. 1539075 - (JPEG-XL) Implement support for Next-Generation Image Compression (JPEG XL). mozilla.org. [dostęp 2021-03-19]. (ang.).

Linki zewnętrzne

edytuj