Za PNG,
http://www.libpng.org/pub/png/ ... Imas biblioteke, specifikacije i ostale zezancije... Isto to imas za MNG na
http://www.libmng.com/pub/mng/ ...
Sto se tog exportovanja GIF-a tice, GIF moze da ima samo 256 boja, tj. 8-bit grafiku, medjutim to ne znaci da te boje moraju biti u osnovnoj paleti... To moze biti i 256 nijansi sive, 256 nijansi plave etc. GIF format takodje koristi mapiranje piksela, ali se kod njega paleta unapred definise. Pa tako ti mapiras boje za odredjeni bajt, u fazonu:
00 0x00FF00
01 0x00FE00
02 0x00FD00
etc. (definisanje zelenih nijansi)... Kasnije kad se zapisuje piksel, GIF ih pamti kao:
FF0A0301 00, etc... Gde je prvo RECT struktura koja definise polozaj piksela, a drugo boja iz unapred definisane palete... Tako da boja zaista ostaje 8-bitna... Naravno, na kraju se sve to kompresuje LZH kompresijom i dobije se GIF kakav cesto srecemo...
Dobro, ovo je povrsno objasnjenje (GIF je ipak malko drugaciji) ali tek da shvatis kako to ide...
PNG ima dosta drugaciji pristup - varijabilni pikseli. To ga cini malko tezim za koriscenje od GIF-a, ali zato fajl moze ispasti i manji nego kod GIF-a... Naime, on (generalno) ne snima definisanu paletu (bilo bi iluzorno mapirati 16+ miliona boja) vec ocekuje da program sam 'desifruje' paletu koju koristi. Po ustaljenom standardu, koristi se RGB pristup pa je 0x00000 crno, 0xffffff je belo... Medjutim, u header-u imas prostora za definisanje palete, jer to moze nekad da napravi ustedu (snimis 8-bit plaletu kao kod GIF-a recimo). E sad, caka je u tome sto dok GIF, koji koristi samo 1 bajt za boju, PNG mora da koristi 3 (nativno, bez definisane palete). Da bi se to nadomestilo, stvorila se jos jedna razlika izmedju PNG-a i GIF-a - dok GIF zapise sve bajtove (prava bitmapa), PNG to ne radi... PNG ima mogucnost da 'mapira' range piksela, tj. da spakuje vise istih piksela u istu definiciju... Recimo da imas sliku 4x4 na kojoj je prvi 'red' beo, drugi red do pola beo, a od pola drugog reda nanize sve je crno. Sad, GIF bi to resio ovako:
-- definisanje palete --
0x01 0x00
0x02 0xFF
-- definisanje RECT velicine --
0xA1
-- mapiranje slike --
00 01 00 01 01 00 02 01 00 03 01 00 04 01 00 05
01 00 06 00 00 07 00 00 08 00 00 09 00 00 10 00
00 11 00 00 12 00 00 13 00 00 14 00 00 15 00 00
(mislim ovo je lupanje tek da ti pokazem kako sve to ide)... Dakle, prvo definise piksel (bold), pa boju iz palete (italic), pa 0x00 (underline) kao kraj definicije piksela, i tako dok ne izredja sve... To je standardna metoda mapiranja piksela...
Kod PNG-a je to malo drugacije... On moze da definise range piksela jedne boje, i range piksela druge boje... U fazonu:
-- definisanje RECT strukture --
0x00000000000000A1
-- mapiranje piksela --
00 FF 05 00 FF FF FF 00 06 FF 15 00 00 00 00
Gde 00 FF 05 predstavlja range od prvog do sestog piksela, a zatim sledi boja FF FF FF (bela) i pa 00 kao kraj definicije prvog range-a, a onda ide definicija piksela do kraja...
Naravno, nije to bas tako u praksi, ali ovo je plastican primer kakva je razlika izmedju ova dva formata... PNG nativno, gotovo uvek, zauzme manje mesta od GIF-a, medjutim PNG ima veci header, definise gama korekcije (kako bi se isto video na svim platformama) i malo drugacije definicije piksela, a koristi standardnu gzip kompresiju, dok GIF koristi LZH i odlicno ga kompresuje (mada je gzip delotvorniji u vecini slucajeva), tako da na kraju velicine fajlova budu priblizno iste (nekad je PNG manji, nekad (retko) GIF) s' tim sto god PNG-a mozes da definises alpha masku i sto imas realnu 24-bitnu paletu boja...
MNG je, sa druge strane, gotovo uvek (dobro, to zavisi od primene) primetno manji od animiranih gif-ova... E sad, jedini je problem sto je MNG jako mlad format i retko koja aplikacija ga podrzava (za sad imas jedino plugin za Mozilla/Netscape browsere) medjutim ako pogledas u strukturu istog, ne moras biti veliki optimista da mu predvidis svetlu buducnost...
Eto, pisao bih ja jos dosta o ovome, mozda cak i tehnicku stranu, ali specifikacije formata imas na gore pomenutim stranama, i videces da uopste nije tesko...
I za kraj, napravi mali test... Otvori bilo koji GIF u Photoshop-u (ili gde god hoces), a onda 'Export for Web' i odaberi PNG-8, i selektuj broj boja koji ima i originalni GIF... Pa proveri sta je vece