Standardy graficzne stosowane w internecie.
W Internecie są stosowane przede wszystkim dwa standardy graficzne GIF i JPEG. Ze względu na ich wady i zalety różnią się ich zastosowania.
Format GIF
Compuserve zdefiniował format GIF w 1987 roku, aby zapewnić standardowy sposób kodowania wielkiej liczby skanowanych i generowanych komputerowo obrazów. Format ten stał się jednym z najczęściej używanych formatów do kolorowych map bitowych, gdyż ten standard zapisu jest bardzo dobrze udokumentowany, co powodowało iż został zastosowany w dużej liczbie programów. Format ten ma też niewielką liczbę wariantów (najczęściej spotykane to GIF87 i GIF89) i jest stosunkowo prosty. Obrazy GIF mogą zawierać przeplot i w takim przypadku dane są zapisywane w kolejności: najpierw co ósmy rząd obrazu, potem co czwarty, potem co drugi, i na końcu wiersze nieparzyste. Pozwala to bardzo w dobry sposób wyświetlać dane przesyłane przez internet w kolejnych przybliżeniach. Format ten może zawierać także klatki prostych animacji. Każda klatka jest oddzielnym obrazem oddzielonym od drugiego zwykłym przecinkiem.
GIF jest zasadniczo prostym formatem mapy bitowej. Najbardziej nieocenionÄ… cechÄ… plików GIF jest to iż piksele sÄ… spakowane przy użyciu tzw: „kompresji sÅ‚ownikowej LZW”. Kompresja LZW jest wyjÄ…tkowo efektownÄ… dla obrazów z powtarzajÄ…cymi siÄ™ wzorami pikseli, włączajÄ…c w to obszary czystych plam kolorystycznych. Gożej format ten sprawdza siÄ™ z kompresjÄ… ze skanowanych i skomplikowanych obrazów, lecz mimo to kompresja LZW jest najskuteczniejszÄ… kompresjÄ… bezstratnÄ….
Wadą plików GIF jest to iż mogą zawierać jedynie do 256 różnych kolorów, wymagając przy tym 8 bitów na piksel, lecz jeśli plik jest zapisywany z mniejszą liczbą kolorów używana jest najmniejsza możliwa liczba bitów.
Budowa pliku GIF:
Plik GIF rozpoczyna się nagłówkiem i opcjonalną globalną mapą kolorów, która jest używana dla wszystkich obrazów zawartych w pliku. Po tym następuje jeden lub więcej obrazów, każdy składający się bloku opisu obrazu, opcjonalnej lokalnej mapy kolorów i skompresowanych danych.
Kodowanie GIF:
Obrazy w pliku GIF są rozdzielone przecinkami I kończą się średnikiem. Każdy obraz rozpoczyna się przecinkiem I nagłówkiem obrazu. Nagłówek obejmuje pozycję lewego górnego rogu obrazu względem brzegów ekranu. Obejmuje również bajt znaczników, w którym są zawarte dane przeplotu. Następny bajt zawiera minimalny rozmiar słowa kodu LZW, a po nim następuje sam obraz. Plik kończy się średnikiem oznaczającym brak dalszych obrazów.
Kompresja LZW
Kompresja LZW dziaÅ‚a na zasadzie budowy sÅ‚ownika ciÄ…gów pikseli. Każdy ciÄ…g w sÅ‚owniku jest identyfikowany przez wartość kodu, a rezultatem dziaÅ‚ania operacji jest lista kodów ze sÅ‚ownika. Kompresor buduje sÅ‚ownik w locie. Na przykÅ‚ad załóżmy, że każdy piksel jest 4-bitowy, z możliwymi wartoÅ›ciami od 0 do 15. Rozpoczynamy od ustawienia pozycji 0 do 15 naszej tabeli kodów ciÄ…gi 1- pikselowe, tak wiÄ™c kodowi 0 odpowiada ciÄ…g zÅ‚ożony z pojedynczego piksela o wartoÅ›ci 0, kodowi 1 piksel 1 , itd. Kod 16 rezerwujemy jako kod czyszczÄ…cy, a kod 17 jako koniec pliku, wiÄ™c nastÄ™pnym nieużywanym kodem jest liczba 18. Kiedy kompresor czyta piksele, znajduje najdÅ‚uższy ciÄ…g pikseli, który może dopasować do pozycji sÅ‚ownika. Zawsze wiÄ™c ma „próbne dopasowywanie” ciÄ…gu pikseli, które już zostaÅ‚y wczytane, ale dla których kod nie zostaÅ‚ jeszcze wysÅ‚any na wyjÅ›cie. Za każdym razem gdy kompresor wczytuje piksel wykonuje kilka operacji:
· Dodaje piksel do próbkowanego ciÄ…gu dopasowanego i sprawdza, czy w sÅ‚owniku istnieje dopasowanie do nowego ciÄ…gu próbnego. JeÅ›li tak to zapamiÄ™tuje kod odpowiadajÄ…cy nowemu próbnemu ciÄ…gowi dopasowanemu i przechodzi do nastÄ™pnego piksela.
· JeÅ›li nowy próbny ciÄ…g nie znajduje siÄ™ w sÅ‚owniku, wysyÅ‚any jest na wyjÅ›cie kod starego ciÄ…gu. NastÄ™pnie nowy ciÄ…g próbny, czyli stary ciÄ…g plus wczytany piksel jest umieszczany w sÅ‚owniku dla przyszÅ‚ego użytku. Stary ciÄ…g jest usuwany ze sÅ‚ownika i proces rozpoczyna siÄ™ od nowa z nowym próbnym ciÄ…giem dopasowywanym, skÅ‚adajÄ…cym siÄ™ z jednego, ostatnio przeczytanego piksela.
Kompresor kontynuuje ten proces, aż przeczyta wszystkie dane wejściowe, na koniec zapisuje kod ostatniego próbnego dopasowywania i kod końca pliku.
Format JPEG
Kolejnym używanym w internecie formatem graficznym są pliki typu JPEG, z rozsrzeżeniem zapisywanym w formie *.jpg. JPEG jest najbardziej wyrafinowanym formatem zapisu map bitowych. Same instrukcje kodera tego formatu zajęłyby 200 stronicową książkę!!!.
Skrót JPEG oznacza: Wspólna Grupa Rzeczoznawców Fotografii (ang. Joint Photographic Experts Group), grupę pracującą pod auspicjami ISO (Internatoinal Organizatoin for Standarization). JPEG jest w zamierzeniu twórców standardową metodą kompresji dla zdigitalizowanych fotografii.
W przeciwieÅ„stwie do formatu GIF JPEG jest formatem stratnym, co oznacza, że nie zawsze dokÅ‚adnie rekonstruuje piksele oryginalnego obrazu peÅ‚no kolorowego. Mimo to zredukowany obraz zdjÄ™cia przypomina bardziej oryginalny obraz niż pochodzÄ…cy z „Bezstratnego” formatu GIF. Jest to spowodowane tym iż GIF zapisuje obrazy w palecie 256 kolorowej. Oznacza to, ze GIF również nie odtwarza oryginalnego obrazu w peÅ‚nym kolorem. W rzeczywistoÅ›ci powoduje to iż mapowanie kolorów powoduje znacznie wiÄ™ksze pogorszenie jakoÅ›ci obrazu dla pliku JPEG o podobnym rozmiarze co plik GIF. W odróżnieniu od GIF, w formacie JPEG możliwa jest zmiana wielkoÅ›ci i jakoÅ›ci obrazu. Za regułę uznaje siÄ™ iż JPEG może zakodować grafikÄ™ przy użyciu przeciÄ™tnie 1 bitu na piksel.
Niektóre rodzaje obrazów nie są odpowiednie dla JPEG. Ponieważ format ten został zaprojektowany do obsługi fotografii, nie radzi sobie dobrze z ostrymi krawędziami, charakterystycznymi dla wykresów i obrazów tworzonych komputerowo. Nie kompresuje też dobrze dużych powierzchni o jednakowym kolorze.
JPEG jest zaprojektowany właściwie jako standard kodowania strumienia danych, a nie pliku. Sprzętowe dekodowanie JPEG powinny być dostatecznie szybkie do dekodowania obrazów w trakcie ich odbierania np. z internetu. Sam format JPEG ma pewne opcjonalne odmiany, które pozwalają wyświetlić obraz niskiej rozdzielczości i poprawić obraz w trakcie jego dalszego odbierania. Każdy nieraz widział ściągając z internetu jakąś grafikę powolną jej krystalizację na ekranie.
Inne formaty JPEG
Powstały dwa formaty plików JPEG. Prostszy nazywa się JFIF i składa się ze strumienia danych JPEG z kilkoma obowiązkowymi elementami, dzięki którym obraz JFIF można rozkodować bez sięgania do jakichkolwiek danych zewnętrznych, lecz jest to jednak format rzadko spotykany w internecie.
Drugim formatem jest pewna odmiana TIFF wprowadzona w specyfikacji TIFF6.0, która osadza obraz JPEG, podzielony w miarÄ™ możliwoÅ›ci na paski i tzw „kafelki” w pliku TIFF. Format ten jest zwany JPEG-w-TIFF i nie staÅ‚ siÄ™ popularny prawdopodobnie dlatego, że jest znacznie bardziej zÅ‚ożony, ale niewiele bardziej użyteczny niż JFIF, a różni siÄ™ tyle od innych formatów kodowania TIFF, że istniejÄ…ce programy odczytujÄ…ce TIFF nie poradziÅ‚y by sobie z nim.
Kodowanie JPEG.
Zmiana 24-bitowego obrazu na strumień danych JPEG przebiega w czterech etapach:
· Kodowanie koloru
· Transformacja DCT
· Kwantyzacja
· Kodowanie
Zwykle pierwszym krokiem w kompresji pełno kolorowego obrazu jest kodowanie kolorów. Jest to krok opcjonalny, ale ponieważ daje 50 % oszczędność miejsca, jest niemal niezmiennie używany.
Oko ludzkie jest znacznie bardziej wyczulone na zmianÄ™ jasnoÅ›ci niż barwy. JeÅ›li bÄ™dziemy mogli przeksztaÅ‚cić dane z kanałów RBG tak, aby jasność byÅ‚a przechowywana w jednej skÅ‚adowej, a kolory w pozostaÅ‚ych dwóch, to okazuje siÄ™, że możemy usunąć wiÄ™kszość informacji o kolorze, bez zauważalnego pogorszenia wyglÄ…du obrazu. Najpowszechniejszy ukÅ‚ad kodowania koloru jest znany jako YCbCr i jest oparty na ukÅ‚adzie używanym w telewizji. Trzy komponenty obrazu stanowiÄ… Y – luminancja piksela, oraz Cb i Cr – chrominancja, którÄ… można jak stopieÅ„ „niebieskoÅ›ci” i czerwonoÅ›ci” piksela. Oblicza je siÄ™ wedÅ‚ug wzorów:
Y = 0,299 R + 0,587 G + 0,114 B
Cb = -0,1687 R – 0,3313 G + 0,5 B
Cr = 0,5 R – 0,4187 G – 0,0813 B
Jest to jeszcze zmian bezstratna, gdyż wartoÅ›ci RGB mogÄ… być odtworzone przez odwrócenie procesów arytmetycznych. Kiedy już mamy skÅ‚adowe YCbCr zmniejszamy gÄ™stość tzw: „podpróbkowania”. Polega to na uÅ›rednieniu wartoÅ›ci skÅ‚adowych chrominancji dla bloku 2 x 2 piksele. Tak wiÄ™c dla bloku 2 x 2 piksele mamy cztery wartoÅ›ci Y, jednÄ… Cb i Cr, czyli razem sześć skÅ‚adowych zamiast 12 ( po cztery R, G i B), z których wyszliÅ›my. Każda z trzech skÅ‚adowych jest teraz traktowana jako oddzielny pÅ‚at obrazu, jest oddzielnie przeksztaÅ‚cana i kompresowana.
Kodowanie kolorów nie jest stosowane przy obrazach z skalą szarości. W tym przypadku wartość piksela jest bezpośrednio poddawana transformacji DCT.
Transformacja DCT jest nastÄ™pnym etapem. DCT to skrót od: Dyskretna Transformacja Kosinusowa (ang. Discrete Cosine Transform). Wykorzystuje ona fakt, iż oko ludzkie jest bardziej czuÅ‚e na stopniowe zmiany jasnoÅ›ci lub koloru niż na nagÅ‚e. DCT pozwala wÅ‚aÅ›nie na dyskretne przejÅ›cia pomiÄ™dzy barwami. Pobiera ona blok 8 x 8 komponentów i wykonuje transformacje matematycznÄ… której wynikiem jest tablica 8 X 8 tzw: „przestrzennych czÄ™stotliwoÅ›ci”. SkÅ‚adowa (0.0) rezultatu okreÅ›la stopieÅ„ niezmiennoÅ›ci skÅ‚adowych wejÅ›ciowych, równoznaczny ze Å›redniÄ… wartoÅ›ciÄ… skÅ‚adowych. SkÅ‚adowe o wiÄ™kszych numerach odzwierciedlajÄ… wyższe czÄ™stotliwoÅ›ci przestrzenne, które reprezentujÄ… szybsze zmiany jasnoÅ›ci lub barwy.
Aby wszystkich znudzić jeszcze bardziej podaje wzór na transformatę DCT, z f(x,y) oznaczającym wartość składową w punkcie(x,y) i F(u,v) będącym wynikową wartością DTC w tablicy (u,v). Każda wartość wyjściowa zależy od wszystkich wartości wyjściowych.
DCT jest ciągle transformacją bezstratną. Oryginalne wartości komponentów mogą być odtworzone odwrotną transformacją DCT. W praktyce błędy zaokrągleń mogą spowodować, że odtworzone wartości różnią się nieco, jednak różnice te są nieistotne w porównaniu z efektami kwantyzacji.
Kwantyzacja jest głównym etapem stratnym podczas kodowania JPEG. Każda z wartości wyjściowych transformaty DCT jest 12 bitową liczbą całkowitą. Dla dowolnego obrazu JPEG istnieje tablica kwantyzacyjna o rozmiarze 8 x 8, którą jest po prostu tablica wartości, przez które podzielone zostaną odpowiednie wartości Transformacji DCT. Dekoder otrzymuje taką samą tablicę z pliku obrazu w którym jest ona zapisana i mnoży wartości z pliku przez odpowiednią pozycję tablicy, aby w przybliżeniu odtworzyć prawdzie dane. Im większy podzielnik tym mniejsza dokładność odtwarzanych wartości, ale im mniejszy wynik kwantyzacji tym mniejszy plik JPEG. Przy zapisywaniu wybierając odpowiedni zestaw podzielników aplikacja może sterować między jakością obrazu a wielkością pliku.
Ostatnim etapem jest pobranie rezultatów kwantyzacji i skompresowanie ich do pliku, proces ten jest znany jako kodowanie entropii. Najpowszechniejszym rodzajem kodowania jest kodowanie Huffmana zmiennej długości z charakterystycznym dla RLE kodowaniem ciągu zer. Kwantowanie składowych wysokich częstotliwości często powoduje ich wyzerowanie. Alternatywnym sposobem do kodowania Huffmana jest kodowanie arytmetyczne. Jest nieco bardziej złożone, lecz nieco bardziej zbija dane niż kod Huffmana. Kodowanie arytmetyczne jest tematem kilku patentów IBM i innych, co powoduje liczne niepewności co do licencjonowania. Spowodowało to iż nie jest ono szeroko stosowane. Biblioteka JPEG używa kodowania Huffman. Na kodowaniu Huffmana proces kompresji został zakończony. Dane zapisane do pliku są kilka, albo kilkanaście razy mniejsze niż plik wyjściowy.
Te dwa standardy są najczęściej używane na stronach WWW. Ze względu na specyficzne cech obu formatów wykorzystuje je się do przedstawiania różnych rzeczy:
Format GIF najlepiej sprawdza siÄ™ w:
- prostych mapach tworzÄ…cych menu strony,
- animacjach zamieszczanych na stronie,
- publikowaniu rysunków technicznych
Format JPEG wykorzystuje siÄ™ do:
- publikacji zdjęć
- tworzenia bardziej zaawansowanych grafik na stronach WWW.
Te dwa formaty są jak dotychczas najlepszymi standardami kompresji jakie opracował człowiek i wszystko na to wskazuje iż długo to się nie zmieni.