Nieprawidłowe wyświetlanie plików PNG w MS Internet Explorer

Wysłany przez kuba dnia 07-02-19 w programowanie, www

Nie jeden webmaster klął na Microsoft(R) za nieprawidłowe wyświetlanie przezroczystości plików PNG w przeglądarkach Internet Explorer - zamiast niej otrzymujemy szare tło. Jedyne co pozostaje to zastosować GIFa, który rzadko się do tego nadaje. Przezroczyste pliki GIF często są poszarpane, a ich jakość jest oczywiście niższa - to dlatego, że ich przezroczystość ma tylko 8 bitów. Myślałem, że tego nie da się obejść w inny sposób niż zaczekać aż IE będzie niszową, mało znaczącą przeglądarką, albo zostanie wypuszczona jego nowa, poprawiona wersja. A jednak...

Zostałem mile zaskoczony, gdy dowiedziałem się, że jest możliwe zmusić IE do prawidłowego pokazania plików PNG :D Do tego jest to bardzo proste i sprowadza się do wywołania specjalnego kodu JavaScript. Kod ten jest pomijany przez inne przeglądarki. Rozwiązanie niemal idealne ;)

W osobnym pliku js umieszczamy poniższy kod:

 

/*
Correctly handle PNG transparency in Win IE 5.5 & 6.
http://homepage.ntlworld.com/bobosola. Updated 18-Jan-2006.
Use in  with DEFER keyword wrapped in conditional comments:
*/
var arVersion = navigator.appVersion.split("MSIE")
var version = parseFloat(arVersion[1])
if ((version >= 5.5) && (document.body.filters))
{
   for(var i=0; i
   {
      var img = document.images[i]
      var imgName = img.src.toUpperCase()
      if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
      {
         var imgID = (img.id) ? "id='" + img.id + "' " : ""
         var imgClass = (img.className) ? "class='" + img.className + "' " : ""
         var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' "
         var imgStyle = "display:inline-block;" + img.style.cssText
         if (img.align == "left") imgStyle = "float:left;" + imgStyle
         if (img.align == "right") imgStyle = "float:right;" + imgStyle
         if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle
         var strNewHTML = "
         + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
         + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
         + "(src=\'" + img.src + "\', sizingMethod='scale');\">"
         img.outerHTML = strNewHTML
         i = i-1
      }
   }
}  

Natomiast w kodzie html strony umieszczamy jego warunkowe dołączenie:




Prawid³owe wy¶wietlanie plików PNG w MS Internet Explorer






Obrazki PNG zostan± poprawnie wy¶wietlone w tym dokumencie tak¿e w Internet Explorer.



To wszystko!! Od tej pory ka¿dy do³±czony do strony plik png bêdzie wy¶wietlony prawid³owo w ka¿dej przegl±darce :)

¼ród³a:

 

5 komentarzy

Wysłany przez xis dnia 07-02-20
Hej, dziwię Ci się, że w ogóle się za to wziąłeś :) Myślałem, że w IE 7 poprawili już tę 'dolegliwość', ale sądząc po Twoim skrypcie, chyba nie. BTW, super narzędzie :)
Wysłany przez Jakub Zalas dnia 07-02-20
IE 7 ma to już poprawione, ale nadal wiele osób używa IE 6 ;) Znalazłem to przez przypadek, nie to żebym specjalnie szukał. Dla ścisłości: to nie mój skrypt, a wykopany z sieci :)
Wysłany przez Vipa dnia 07-03-28
Dalej nie ma przezroczystości, jeżeli przezroczysty PNG jest wstawiony jako tło. :(
Wysłany przez ziom dnia 07-07-09
wcale nie jest tak fajnie z ta przezroczystościa - bo ten obrazek png jest przezroczysty do samego tła, tzn. jesli za tło masz ustawiony kolor to wszystko jest ok, ale jak za tło ustawiony masz inny obrazek to i tak pojawi sie kolor tła. Chyba prosciej jest juz sie pobawic zeby nasz png zamienił sie w dobrze wkomponowany jpeg.
Wysłany przez Jakub Zalas dnia 07-07-11
No tak... jak widać rozwiązanie nie jest idealne :D

Napisz komentarz