Postać cyfrowaPodstawowe pytanie związane z doborem formatu(sposobu) zapisu, to jak zapisywać. Czy zapisywać rysunki kropka po kropce, punkt po punkcie? Czy może zapisywać współrzędne matematyczne krzywych i rysować krzywą na ekranie odbiorcy rysunku? Wszystko zależy od tego, co zapisujemy i w jakiej wielkości bedzie wyświetlane. Zajmiemy się pierwszym sposobem, czyli zapisaniem bitmapy. W drugim przypadku mówi się o zapisie wektorowym.

Grafika może zapisana być na kilka sposobów (kilka formatów). Każdy punkt obrazu musi być opisany kolorem. Ile kolorów potrzebujemy w całym obrazie? To zależy od tego, co chcemy zapisać. Załóżmy, że chcemy zapisać tekst czarny na białym tle, wystarczy nam wtedy kilka kolorów. Jeżeli okaże się, że mamy ochotę zapisać zdjęcie zachodzącego słońca nad morzem, wtedy kilka kolorów już nie wystarczy. Potrzebujemy wiele tysięcy odcieni czerwonego żółtego, niebieskiego, brązowego i tak dalej. Daje to nam miliony potrzebnych kolorów a więc potrzebny jest nam już format True Color, czyli 32 bity na każdy punkt. 32 bity na każdy punkt to 4 bajty (32 bity/8 = 4 B). Obrazek o rozmiarch 600x800 punktów (obraz ekranu w popularnej rozdzielczości) zapisany byłby w pliku wielkości 1,8 MB, czyli zajmowałby przeszło jedną dyskietkę. (600x800 x 4B= 1920000 B, 1 920 000 B/1024 B= 1875 KB/1024 KB = 1,83 MB) Bez "zagęszczenia" (tzw. kompresji) takiego obrazka byłoby krucho. Są różne metody kompresji większość bardzo skomplikowanych.

HIGH COLOR 16 bitów na każdy punkt (216=65 536 różnych kolorów)
TRUE COLOR 32 bity na każdy punkt (232=4 294 967 296 różnych kolorów)

Załóżmy, że mamy do zapisania rysunek litery a.

Do zapisania każdego punktu tego rysunku wystarczą 4 kolory. Rysunek składa się z 20 punktów szerokości i 21 punktów wysokości, na każdy punkt potrzebujemy 2 bitów do zapisania 4 kolorów (stany bitów: 11, 10, 01, 00). Daje to 21x20x4b= 1680 bitów, czyli 210 B (bajtów). Na każdy kolor byłby na pewno wykorzystany cały bajt, co dałoby możliwość poprawnego odczytania obrazka, nawet gdyby kilka bajtów było źle zapisanych w wyniku przekłamań. Mamy więc, zamiast 210, aż 840 bajtów.
Programy zapisują obrazki razem z dodatkowymi informacjami o formacie, więc taki obrazek ma około 1 kB (kilobajt). Przy tak małych obrazkach te informacje zajmują wielokrotnie więcej niż sam obrazek. Najmniejszą wartością, jaką uzyskałem zapisując ten rysunek w kilku programach było 160 bajtów. Musiał więc rysunek zostać w jakiś sposób skompresowany.

Jak można skompresować taki obrazek? np. zamiast pierwszej linii typu bbbbb bbbbb bbbbb bbbbb (20 białych piksli) można zapisać w postaci 20b. Zamiast 20 bajtów, mamy 2 bajty! Jak długi ciąg dało by się zapisać w takim rysunku? Zależy od tego, jak bardzo skomplikowany byłby rusunek. Gdyby był to rysunek jednokolorowy, mielibyśmy 256 jednakowych punktów zapisanych przy pomocy jednego bajtu (1 bajt = 256 różnych stanów). Drugi bajt byłby użyty do informacji o naszym formacie i jeden do informacji, że punkty będą się powtarzały. Razem trzy bajty. Niestety, takie małe i proste obrazki nie trafiają się często.
Gdyby nasz format miał być sprawny, musiałby mieć co najmniej 3 bajty na liczbę powtarzających elementów (mogą być przecież dłuże ciągi powtarzający się elementów): 256x256x256=16777216 - to 16 milionów powtarzających się elementów - to powinno wystarczyć.
Nasz zapis tego obrazka:
(20)1
(6)1(1)2(1)3(4)4(1)3(1)2(1)2(6)1
(3)1(1)2(1)3(9)4(1)3(5)2
... (W nawiasie określamy ilość powtarzających się kolorów, a poza nawiasem numer użytego koloru z palety 1-jasny, 2-ciemniejszy, 3-jeszcze ciemniejszy, 4-czarny)
Na zapisanie trzech linii użyliśmy 15 par po dwa bajty, razem 30 bajtów (nawiasy są tylko dla naszej lepszej orientacji). W sumie na cały taki prosty rysunek użylibyśmy 7x30 bajtów=210 bajtów.
Dodalibyśmy jeszcze informację o użytej palecie kolorów, o rozmiarach o formacie i kilka innych. W sumieobrazek ten miałby wielkość około 250 bajtów! Więcej niż to zrobił program! Widocznie program posiada lepszą metodę kompresji! Jest jeszcze dużo możliwości zmniejszenia wielkości obrazka. Można np. zapisać powtarzajace się linie tylko raz, zapisywać powtarzające się ciągi np. (3)1(1)2(1)3(4)4 (kolejne kolory) itd. Programy kompresujące wykorzystują takie metody. Format jpg nawet wykonuje nawet operacje poprawiania pewnych ciągów w pliku, żeby rozmiar pliku był mniejszy. Plik jest minimalnie gorszej jakości, a zdjęcie i tak jest czytelne. Inne formaty nic nie kompresują, pliki są za to wielkie. Coś za coś.



Formaty Mamy do wyboru kilka formatów zapisu grafiki: BMP, TIF, GIF, JPG, PNG i inne. Różne są tam metody kompresji. Najłatwiej pokazać wady i zalety tych metod na przykładach.

Ten sam obrazek bez kompresji w różnych formatach.
(3kB)
GIF 2 252 B
(1kB)
PNG 985 B
(7kB)
JPG 6 184 B
(30kB)
BMP 30 054 B
(30kB)
TIF 30 492 B
Ten sam obrazek z kompresją w różnych formatach.
(2kB)
GIF 1 380 B
(1kB)
PNG 251 B
(5kB)
JPG 4 174 B
(6kB)
BMP 5 318 B
(6kB)
TIF 5 594 B
Kompresja w formacie GIF, PNG, BMP i TIF polega na ograniczeniu liczby użytych kolorów. Tutaj nie ma z tym problemów, bo kolorów jest niewiele, nie stracił rysunek na jakości. Zobaczymy później co się stanie, gdy będzie więcej kolorów.
Kompresja w JPG polega na tworzeniu powtarzalnych ciągów, traci się na jakości już bezpowrotnie.



Obrazek z przejściami tonalnymi tzw. gradientem.
(6kB)
GIF 5 253 B
(7kB)
PNG 6 889 B
(6kB)
JPG 6 119 B
(30kB)
BMP 30 054 B
(30kB)
TIF 30 492 B

Format GIF kompletnie nie nadaje się do takich grafik z powodu ograniczenia swojej palety do 256 kolorów. W formacie TIF i BMP wielkość pliku bez kompresji jest taka sama. Za duża!
Format PNG okazał się najbardziej uniwersalny. Jak widać "wygrał" format JPG, po kompresji pliku w formacie JPG wielkość otrzymanego pliku wynosi nawet 2 398 B. Widać drobną stratę przy krawędziach, ale jeszcze jest to do zaakceptowania.
(3kB)
JPG 90% 2 398 B.


Podobne wyniki uzyskamy w przypadku zdjęć. Zresztą zobaczmy.
(12kB)
GIF 11 752 B
(26kB)
PNG 26 272 B
(5kB)
JPG 4 110 B
(30kB)
BMP 30 054 B
(30kB)
TIF 30 220 B

Przy tak małym zdjęciu i tak niewielu kolorach zapis GIF i tak "wyprodukował" duży plik. Zaskakująco duży wyszedł format PNG. Formaty BMP i TIF, chociaż bezstratne, "produkują" porównywalnie duże pliki. Zwyciężył format JPG. Warto zobaczyć, że rysunek pierwszy z lewej pomimo optymalnie dobranych kolorów, jest minimalnie ciemniejszy; zabrakło w formacie GIF kolorów.
Z formatem PNG wynik nie zawsze jest tak oczywisty jak tutaj. Zawsze warto spróbować, szczególnie, gdy zapisujemy grafikę o przeciętnej liczbie kolorów. Nie ma wtedy takiego rozmycia jak w formacie JPG.

Jaki format do czego się nadaje?
TIF, BMP - formaty bezstratne do zapisywania zdjęć, obrazków itd, w zasadzie wszystkiego do celów reprodukcji, przygotowanie grafik i zdjęć na duże formaty; tylko dla osób posiadających nagrywarkę na płyty CD. Powstają bardzo duże pliki, nawet do 40 MB.
PNG, JPG - formaty "lżejsze" do zapisywania zdjęć, obrazków do celów własnych, do przesłania przez internet, na dyskietce itd..
GIF, PNG - przygotowanie czytelnych rysunków, szkiców bez przejść tonalnych - GIF i z przejściami PNG.














Technologia informacyjna, przejdź do menu głównego