77 votes

Image vierge codée en data-uri

J'ai construit un slider d'images (basé sur le formidable système de gestion de l'image). bxSlider ) qui préchargera les images juste à temps avant qu'elles ne s'affichent. Cela fonctionne déjà assez bien, mais je ne pense pas que ma solution soit du HTML valide.

Ma technique est la suivante : Je génère le balisage du curseur avec la première image de la diapositive qui est insérée comme d'habitude (avec une balise <img src="foo.jpg"> ) et les images suivantes étant référencées dans un attribut de données tel que <img data-orig="bar.jpg"> . Un Javascript jongle ensuite avec les data-orig -> src changer si nécessaire, ce qui déclenche le préchargement.

En d'autres termes, je l'ai fait :

<div class="slider">
    <div><img src="time.jpg" /></div> 
    <div><img src="data:" data-orig="fastelavn.jpg" /></div> 
    <div><img src="data:" data-orig="pels_strik.jpg" /></div> 
    <div><img src="data:" data-orig="fashion.jpg" /></div> 
</div>

Pour éviter les vides src="" (qui sont nuisible à la performance en certains navigateurs ), j'ai inséré src="data:" pour insérer efficacement une image vierge en guise d'emplacement.

Le truc, c'est que je ne trouve rien dans le documentation pour data-URI disant si c'est une URL de données valide ou non. Je veux essentiellement la data-URI minimale qui se résout en une image vide/transparente, de sorte que le navigateur puisse résoudre la src immédiatement et passer à autre chose (sans erreur ni demande de réseau). Peut-être src="data:image/gif;base64," serait mieux ?

0 votes

Utilisez simplement un hachage vide. stackoverflow.com/a/28077004/3841049

0 votes

@iGidas : mauvaise idée, car de nombreux navigateurs effectueront une deuxième demande à la page principale (ce qui aura un impact sur les performances bien pire que l'image originale et créera des entrées déroutantes dans les journaux de votre serveur), essaieront d'interpréter le HTML comme une image, lanceront une erreur et provoqueront potentiellement de véritables erreurs d'application (par exemple, dans les paniers d'achat / pages de paiement où le "rafraîchissement de la page" entraîne l'ajout de nouveaux articles dans le panier ou déclenche des mesures de sécurité).

0 votes

Qu'en est-il de l'actuel data:image/gif;base64, utilisé comme un src ? Ou encore plus court data:, se terminant par un coma. Il semble que ce soit du HTML valide et qu'il fonctionne dans tous les navigateurs modernes sans aucune erreur. Des arguments contre son utilisation ?

167voto

Jens Roland Points 19171

Je me suis renseigné et le une image GIF transparente la plus petite possible encodé comme un data-uri, était le suivant :

data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==

qui est ce que j'utilise maintenant.

1 votes

Si votre img est déjà caché et que vous essayez simplement d'éviter les erreurs HTTP 404, voir stackoverflow.com/a/14115340/14731 pour une donnée plus courte d'une image non transparente.

39voto

Fabrizio Calderan Points 43398

Si vous avez besoin d'une image transparente de 1x1 pixel, il suffit de définir cette uri de données comme src attribut par défaut (conservez l'attribut /// il encode l'octet 255, et non un commentaire).

data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==

Il s'agit plutôt d'un encodage base64 pour une image 1x1 blanche.

data:image/gif;base64,R0lGODlhAQABAIAAAP7//wAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw==

Sinon, vous pourriez définir data:null et économiser ~60 octets supplémentaires pour chaque image.

4 votes

Pouvez-vous fournir un lien permettant de vérifier que data:null est valide en tant que source d'image ?

1 votes

@JensRoland, les données vides sont valides selon cette KB de Mozilla : www-archive.mozilla.org/quality/networking/testing/ Mais la non-image n'est pas rendue, et les attributs alt ne sont pas pris en compte.

1 votes

@K3---rnc : J'ai vu cette liste de Mozilla ; malheureusement, ce n'est pas la spécification, simplement le comportement attendu des testeurs de Mozilla ; en d'autres termes, cela reflète l'interprétation de la spécification par Mozilla. C'est un bon signe, mais cela offre peu d'assurance que toute version d'IE ou de Webkit se comportera de la même manière.

25voto

Bludream Points 300

Le plus petit que j'ai jamais vu

data:image/gif;base64,R0lGODlhAQABAAAAACw=

mettre à jour : Ceci semble cassé et ne fonctionne plus comme signalé par @bryc, veuillez utiliser les autres réponses.

7 votes

Bien sûr, sauf que celui-là est uniquement pour Chrome. Ouvrez-le dans Firefox et vous obtiendrez The image cannot be displayed because it contains errors . Voir proger.i-forge.net/

1 votes

@JensRoland, oui c'est vrai, je confirme que ça ne marche pas sur Firefox ! pourtant quand je l'ai utilisé il y a plus d'un an je ne me souviens d'aucun problème avec FF ! bizarre

0 votes

@JensRoland Ce lien m'a permis de résoudre le problème. J'avais besoin d'un PNG transparent : si on change l'opacité sur un img dont le src est le gif clair, quand on réinitialise l'opacité, la clarté est glitchée.

12voto

Alex Points 5018
data:image/gif;base64,R0lGODlhAQABAAAAACwAAAAAAQABAAA=

est plus petit :D

1 votes

C'est vrai, celui-là est adorable ! Mais est-ce un gif conforme à la norme ? Pourriez-vous nous expliquer comment vous avez obtenu ce résultat ?

2 votes

2 votes

Le lien indique que cette version et celle de 14 octets sont destinées à Chrome uniquement et qu'il n'est pas garanti qu'elles fonctionnent sur tous les navigateurs. En outre, le fichier gif résultant ne semble pas s'ouvrir dans un éditeur d'images. J'hésiterais donc à l'utiliser.

5voto

Maël Nison Points 1815

Le "gif blanc" de Fabrizio n'est en fait pas parfaitement blanc : il est rgb(254, 255, 255) .

J'utilise celui qui suit (qui se trouve être plus petit), trouvé sur cette page .

data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=

0 votes

Celui-ci est parfait si vous voulez un pixel blanc, mais je cherchais un pixel transparent plus polyvalent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X