Spip :: Filtre |image_base64
le | Tags HTML, Hack, Spip, Web, php
Le filtre que le vous propose ici va nous permettre d’encoder les images en base64 et ainsi de pouvoir les intégrer directement en ligne dans le code HTML de notre page. Et là, vous allez me dire : mais pourquoi faire que Diable ? et je vais vous répondre : bah, pour limiter le nombre de requêtes HTTP et optimiser un peu les accès serveur pardi !!
Notez que cette technique est aussi très avantageuse pour les images présentes en CSS, mais nous verrons cela dans un autre Hack ;)
Ouvrez donc le fichier mes_fonctions.php à la racine du répertoire de votre squelette (au besoin créez le fichier) puis copiez coller le code ci-dessous.
* Ce filtre transforme une image en Base64 pour intégration
* directe dans le html afin de limiter le nombre de requètes
*/
function image_base64($img){
if($img){
// Détection du user-agent histoire de savoir à quel navigo on a affaire
$userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);
// On check si on est pas en présence d'une version antérieure à IE8
if (preg_match("#(msie)[/ ]?([0-9.]*)#", $userAgent, $match))
{
// Version antérieure à 8
if($match[2] < 8)
{
$msie = true;
}
}
// Si c'est pas un Dynobrowser on applique le filtre
if ( $msie != true )
{
// extraction de l'url de limage
$src = extraire_attribut($img, "src");
// on fait un peu de ménage
$src = preg_replace("#\?[0-9]*#", "", $src);
// lecture du fichier en mode binaire
$bin = fread(fopen($src, "r"), filesize($src));
// Retourne le type de contenu au format MIME
$mime = mime_content_type($src);
// Passage de l'image en base64 et préparation du nouveau src
$src = "data:".$mime.";base64," . base64_encode($bin);
// Enfin on remplace le src par notre version en base64
$img = inserer_attribut($img,"src",$src);
}
}
return $img;
}
Le filtre agit de la façon suivante :
il commence par vérifier l’identité du navigateur du client, car les versions d’Internet Explorer antérieures à la 8 ne gèrent pas les images en base64 et dans ce cas le filtre ne fait rien.
Sinon, il récupère le chemin de l’image et applique l’encodage puis modifie l’attribut src de notre balise image avec la chaine encodée en base64.
Réservez ce filtre pour les images de tailles modestes. Sur ce site par exemple, les logos d’articles ainsi que les images du pied de page sont encodées.
Vos commentaires
1. Le 11 mars 2011 à 14:44, par Aurélien
salut,
merci pour ce filtre deja.
cela dit ca ne marche pas chez moi :
( ! ) Fatal error : Call to undefined function mime_content_type() in C :\wamp\www\config\mes_options.php on line 31
voici la ligne 31 :
$mime = mime_content_type($src) ;
2. Le 12 mars 2011 à 11:08, par Fabrice Coutant
Bonjour Aurélien,
en fait la fonction mime_content_type() de php est maintenant obsolète et ne doit pas être gérée par ton installation. Il faut donc utiliser les fonctions Fileinfo http://fr.php.net/manual/fr/ref.fil...
Je corrige l’article asap ;)
merci
3. Le 14 mars 2011 à 11:53, par Aurélien
Ok merci ;)
Répondre à cet article
Suivre les commentaires :
| 