PNG2GIF in IE6 v1.1

Door - -, 18 jaar geleden, 4.808x bekeken

Ik zat weer eens met het PNG-probleem van IE6: transparantie wordt niet ondersteund. Tot nu toe gebruikte ik één van deze twee oplossingen: extra GIF-versie maken, of een JavaScript-hack op de client. Beiden natuurlijk niet erg fijn, dus besloot ik maar wat anders te bouwen.

De htaccess stuurt alle requests van IE6 (of lager) voor een .png-bestand door naar een PHP-script.

In dat PHP-script wordt eerst gekeken òf er wel transparantie in de afbeelding voorkomt.
Indien dat niet zo is, wordt het plaatje gewoon als PNG geoutput. Reden: in GIF kunnen maximaal 256 kleuren gebruikt worden, dus plaatjes zijn minder mooi. Als er in een PNG geen transparantie is, kan 'ie door IE6 wel prima weergegeven worden. Geen reden voor een extra conversie dus.
Indien dat wel zo is wordt de afbeelding omgezet naar een GIF'je, en ook zo geoutput.

Update v1.1:
Caching is toegevoegd. Ik post later een UML-diagram met de werking van het script.

Gesponsorde koppelingen

PHP script bestanden

  1. png2gif-in-ie6-v11

 

Er zijn 7 reacties op 'Image manipulation'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Roel -
Roel -
18 jaar geleden
 
0 +1 -0 -1
Hmm, hier kan ik wel wat aan hebben omdat ik eigenlijk m'n sites script voor Firefox, en Internet Explorer heeft idd geen transperant functie.
Arian Stolwijk
Arian Stolwijk
18 jaar geleden
 
0 +1 -0 -1
Misschien handig om een soort cache functie te maken. Dat hij de gifjes/pngtjes opslaat, zodat niet dit hele script hoeft worden uitgevoerd.

Je kunt bijvoorbeeld de REQUEST_URI of gewoon $_GET['url'] gebruiken, daar een hash van maken en .gif toevoegen zodat je 'nette' bestandsnamen krijgt. Dan die in een apart mapje opslaan. Nu moet het script eerst kijken of dit bestandje al bestaat of het origineel nieuwer is dan het gecachete bestand (met filemtime() ofzo). Indien het gecachete bestand voldoet die weergeven en anders de rest van het script uitvoeren. GD functies schijnen namelijk wat zwaarder dus langzamer te zijn dan gewone simpele functies... Ook omdat je iedere pixel gaat checken of het alpha is zal dit niet ten goede komen aan de snelheid.

Ook vraag ik me af of je op regel 81 imagepng() moet gebruiken of gewoon file_get_contents()... ik weet niet wat sneller is, misschien is dat leuk om even uit te zoeken met een benchmark (snelheidstest) ofzo...

Tevevens vraag ik me af waarom je de height en width in een constante zet. Dat lijkt me nét een beetje overdreven. Een variable lijkt mij ook wel te volstaan.

Verder moet ik zeggen dat het een leuk idee is en dat je het best netjes hebt gedaan.
Niek Weevers
Niek Weevers
18 jaar geleden
 
0 +1 -0 -1
Ik zal dit nooit gebruiken. Er is al een tijdje een goede png fix door dd_belated pgnfix.
- -
- -
18 jaar geleden
 
0 +1 -0 -1
@Roel: Oké, goed zo!

@Arian: Inderdaad een goed idee. Ik had daar al over nagedacht, maar ik heb het nog niet geïmplementeerd. Ik ga daar zo (misschien) wel even mee stoeien.

@Niek: Dat werk met JavaScript. Mensen die JavaScript uit hebben staan hebben dus een probleem. (En ja, ik weet het, 99% heeft JavaScript aanstaan, maar dan nog is er 1% die het uit heeft staan.)
Dennis Mertens
Dennis Mertens
18 jaar geleden
 
0 +1 -0 -1
Die 1% weet hoe een webbrowser werkt. Dus is het zo aangezet.
- -
- -
18 jaar geleden
 
0 +1 -0 -1
@Dennis: Oké, dat zou zo kunnen zijn, maar als iemand weet hoe een webbrowser werkt, hoezo zit diegene dan nog op IE6? Ik heb nog wel meer argumenten als je wilt, bijvoorbeeld deze: mijn oplossing werkt veel sneller dan een JavaScript-oplossing. Dat zal om tiende seconden gaan, en dat is een groot verschil.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Michael -
Michael -
18 jaar geleden
 
0 +1 -0 -1
Ik snap dat een javascript oplossing niet altijd handig is, maar wat is er mis met de IE CSS PNG hack?
Werkt altijd nog prima hoor. Voorbeeld:

#header {
background:url(img/header.png) no-repeat;
}

* html #header {
background: none !important; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='img/header.png', sizingMethod='image');
}

Lijkt me veel makkelijker dan jou htaccess oplossing en ook mooier want ik wil niet mijn header in 256 kleuren hebben.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. png2gif-in-ie6-v11

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.