08
02

PNG Training

Mit dem nun doch kom­men­den Release vom Inter­net Explo­rer 7, wird das Thema PNG end­lich neu auf­ge­legt. Laut Micro­soft wird der neue Explo­rer PNG 100% unter­stüt­zen:

“IE 7.0 will fea­ture inter­na­tio­nal domain name (IDN) sup­port; trans­pa­rent Por­ta­ble Net­work Gra­phics (PNG) sup­port, which will allow for the dis­play of over­layed images in the brow­ser; and new func­tio­na­lity that will sim­plify prin­ting from inside IE 7.0, part­ner sour­ces said. The new brow­ser also will likely include a built-in news aggre­ga­tor.”

Damit wird das PNG For­mat sei­nen Sie­ges­zug antre­ten, denn das ein­zige Argu­ment was gegen PNG sprach (die Inkom­ba­ti­bi­li­tät des IEx­plo­rers), ist damit Geschichte. Für mich hieß dies, dass ich mich mal etwas mehr mit dem Thema befas­sen sollte, mit dem Ergeb­nis, dass ein paar Expe­ri­mente prä­sen­tiert wer­den kön­nen.

Als Ein­lei­tung auf das Thema möchte ich auf die­sen Arti­kel ver­wei­sen. Hier wer­den so ziem­lich alle wich­ti­gen Fra­gen beant­wor­tet. Ich möchte dage­gen etwas mehr auf die prak­ti­sche Anwen­dung ein­ge­hen. Für mich bedeu­tet PNG in ers­ter Linie ein voll unter­stütz­ter Alpha­ka­nal, wie man es aus Anwen­dun­gen wie zum Bei­spiel Pho­to­shop kennt. Die­ser Fakt macht das PNG For­mat ein­zig­ar­tig. Ziel war es also, volle Tranz­pa­renz prak­tisch anwend­bar zu machen.

IE Lösun­gen

Auch wenn IE 7 nun in Aus­sicht steht, gibt es noch den guten alten IE 5/6. Spe­zi­ell zum Thema PNG im Pro­blem­brow­ser, gibt es mehr als genug Lösun­gen. Hier hat man die Qual der Wahl.

Eine kleine Anmer­kung noch vor­weg. Dies alles hier sind reine kleine Spie­ler­ein zu Test­zwe­cken. Dazu gehört auch, dass der Quell­code bei wei­tem nicht sau­ber und teils recht auf­ge­bläht ist. Für einen ech­ten Ein­satz rate ich ab, die Code Bei­spiele unver­än­dert zu über­neh­men.

Drop­sha­dows

Da war es wie­der, das böse Wort. Den­noch, als Bei­spiel für eine Tranz­pa­renz Anwen­dung mit PNGs ist es per­fekt.

Ergeb­nis: fer­tige Test­seite

Die erste Schock kam, als ich sah wie groß die PNGs waren. Diese Gra­fik hat eine Datei­größe von 64 KByte ! Mehr als viel zu viel. Es war an der Zeit zu schauen, wie PNG kom­pri­miert. Um voll abge­stufte Tranz­spa­renz zu erhal­ten, spei­chert PNG wie auch Pho­to­shop für jeden Pixel einen sepa­ra­ten Alpha­wert. Der Unter­schied zu Tranz­pa­renz ala Gif ist klar. Gif speich­tert einen Alpha Wert als 1 oder 0 - trans­pa­rent oder deckend. PNG stuft ab. Aller­dings macht die 24bit Kom­pri­mie­rung noch etwas ande­res, dazu aber spä­ter mehr. Klar war an dem Punkt, dass sol­che Gra­fi­ken nicht ein­setz­bar sind, da deren Datei­größe zu rie­sig ist.

zwei­ter Ver­such:

Mein zwei­ter Gedanke ging in die Rich­tung, den Schat­ten vom Rest abzu­tren­nen. Ich ska­lierte ein­fach die viel zu spei­cher­in­ten­si­ven Files und spei­cherte diese ver­klei­nert ab. Dar­über sollte dann nur eine Fül­lung in pas­sen­der Größe kom­men. Da der Schat­ten nur Stu­fen von trans­pa­ren­tem Schwarz ist, dachte ich, dies wär sehr gut ska­lier­bar und würde kaum Qua­li­tät ein­bü­ßen. Der Grund dafür war, dass die­ses Skript, wel­ches PNGs im IEx­plo­rer dar­stellt, auf einem DirectX Fil­ter basiert, der gleich­zei­tig die PNGs inter­po­liert, sofern diese eine gerin­gere Größe besit­zen, als gebraucht wird. Genau die­sen Fil­ter hätte man so sehr gut miss­brau­chen kön­nen.

High-Res über Low-Res Bild

Im IEx­plo­rer sah, das Ganze auch wun­der­bar aus. Fire­fox aller­dings zeigte einen sehr unsau­be­ren übergang an der Kante vom High­Res Bild zum Low­Res Bild. Was die Datei­größe anging hatte ich defi­ni­tiv gewon­nen. Aus dem 64kb PNG sind nun 2 PNGs mit einer Gesamt­größe von nur 29kb gewor­den, eine über 50% Kom­pri­mie­rung - nicht übel.

drit­ter Ver­such:

Nur eine GrafikAn dem Punkt ging ich einen klei­nen Schritt zurück, dass heißt aus der schi­cken Zet­tel­gra­fik wurde ein schlichte und ste­rile Recht­eck Form. Der Gedanke war, ich spare mir somit eine der Gra­fi­ken. Als ich schließ­lich im Pho­to­shop die Datei­größe der sepa­ra­ten Schat­ten PNG sah, war ich über­rascht. Diese ist nur 5kb groß. Wie kann das sein? Vor­teil die­ser Methode: bei solch ein­fa­chen For­men (Recht­eck) ist die Schat­ten­gra­fik pro­blem­los ska­lier­bar und passt sich allen Grö­ßen an. Man hat so eine Gra­fik, die sich für alle DIVs als Schat­ten ver­wen­den ließe. Danach war die Lösung klar.

bin fast da

Nun war es ein­fach: Schat­ten und Fül­lung sepa­rat in der pas­sen­den Größe. Die ent­schei­dende Frage war, wieso diese 2 sepa­ra­ten PNGs zusam­men klei­ner sind als ein PNG mit Fül­lung und Schat­ten zusam­men? Nach ein paar wei­te­ren Tests ist der Grund recht ein­fach. PNG 24 spei­chert semi-intelligent aber voll­au­to­ma­tisch. Das reine Schat­ten PNG ist quasi ein­far­big und nur durch die Trans­pa­renz­stu­fen gekenn­zeich­net. Hier redu­ziert PNG 24 defi­ni­tiv auto­ma­tisch die Far­ben. Sobald aller­dings die Fül­lung dazu­kommt, kann PNG 24 keine Far­ben mehr redu­zie­ren. Dann schlägt die volle Farb- und Transparenz-Palette für jeden Pixel zu.

Bei der sepa­ra­ten Fül­lung konnte ich manu­ell eine 8 Far­ben­re­du­zie­rung fest­le­gen. Sofern das For­mat wei­ter­ent­wi­ckelt wer­den sollte, wäre der nächste Schritt also eine manu­elle Farb­pa­let­ten Fest­le­gung gekop­pelt mit vol­lem Alpha­ka­nal. Bis dahin, läuft man immer bes­ser, wenn man beide Gra­fi­ken sepa­rat spei­chert.

Fazit

PNG hat auf alle Fälle eine Zukunft, sofern IE 7 end­lich den ver­spro­che­nen Sup­port bie­tet, wer­den wir in 1 Jahr PNGs in der brei­ten Anwen­dung fin­den. Der volle Alpha­ka­nal ist zu schick und eröff­net neue Mög­lich­kei­ten des Gestal­tens, als dass man PNG unbe­ach­tet links lie­gen las­sen könnte. Die­ser Ein­trag soll zei­gen, was schon heute (wenn auch über kleine Umwege) rea­li­sier­bar ist bzw. was es im Umgang mit PNGs zu beach­ten gilt.

fer­tige Test­seite

1 Kommentar

Für diesen Eintrag wurden die Kommentare geschlossen.

  • #1
  • Fr, 27. Januar 2006
  • tomsw schrieb:

Wow, sehr gei­ler Arti­kel!