888 votes

Comment afficher des images Base64 en HTML

J'ai du mal à afficher une image Base64 en ligne.

Comment puis-je le faire ?

<!DOCTYPE html>
<html>
  <head>
    <title>Display Image</title>
  </head>
  <body>
    <img style='display:block; width:100px;height:100px;' id='base64image'
       src='data:image/jpeg;base64, LzlqLzRBQ... <!-- Base64 data -->' />
  </body>
</html>

1 votes

L'extension de l'image est-elle importante dans le src

5 votes

À tous ceux qui lisent cette question et ses réponses... demandez-vous si vous avez réellement besoin de l'encodage base64 ou non. Les navigateurs modernes n'en ont pratiquement jamais besoin. Si vous utilisez l'encodage base64, vous ajoutez 33 % de frais généraux à la taille de l'image, des exigences supplémentaires en termes de CPU et de mémoire lors de l'encodage et du décodage, vous encombrez le DOM avec des données supplémentaires qui n'ont pas besoin d'être là, et vous imposez des limites strictes et incohérentes sur les tailles et les types de ressources. Utilisez plutôt des blobs, des URL d'objets, etc.

1343voto

VinayC Points 23947

Mon suspect est bien sûr les données Base64 réelles. Sinon, tout me semble correct. Voir ce violon où un schéma similaire fonctionne. Vous pouvez essayer de spécifier le jeu de caractères.

<div>
  <p>Taken from wikpedia</p>
  <img src="data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAUA
    AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO
        9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />
</div>

Vous pouvez essayer ce décodeur Base64 pour voir si vos données Base64 sont correctes ou non.

0 votes

Merci d'avoir pris le temps de répondre à ma question... ce js fiddle sort simplement un point rouge ? c'est ce qu'il est censé faire ?

0 votes

@Christopher, oui - c'est un URI de données pour une image de point rouge (source : fr.wikipedia.org/wiki/Data_URI_scheme ). Je signale simplement qu'il n'y a pas de problème apparent dans ce que vous faites, sauf peut-être les données base64 réelles. Utilisez le décodeur donné et enregistrez les données binaires décodées comme un fichier jpeg et essayez de l'ouvrir. Si cela ne fonctionne pas, il y a un problème dans votre encodage base64.

3 votes

Je pense avoir découvert le problème : lorsque le fichier base64 est téléchargé, tous les "+" semblent être supprimés. Ce qui annule en interne le jpeg. J'envoie l'image depuis un appareil vers le serveur avec AJAX. Est-il possible que le "+" ne soit pas transmis correctement parce qu'il s'agit d'une entité html ?

115voto

Hemant Metalia Points 8325

Vous devez spécifier le bon Type de contenu , Content-encoding y jeu de caractères .

Comme

 data:image/jpeg;charset=utf-8;base64,

conformément à la syntaxe de la schéma URI de données :

 data:[<media type>][;charset=<character set>][;base64],<data>

1 votes

stackoverflow.com/questions/13265902/ suggère qu'il n'y a pas d'en-tête pour coder le corps HTTP en utilisant la base-64.

1 votes

Aussi, stackoverflow.com/questions/7285372/ - c'est un en-tête MIME, pas un en-tête HTTP. Pouvez-vous nous expliquer comment le codage du contenu doit être spécifié ?

4 votes

Cela a résolu le problème pour moi. Chrome supposait l'UTF-8 et affichait les images, tandis que Microsoft Edge ne parvenait pas à effectuer le rendu. Une fois que j'ai inclus le jeu de caractères, les images s'affichent parfaitement.

50voto

Yaşar Xavan Points 102

Si vous avez PHP en back-end, vous pouvez utiliser ce code :

$image = 'http://images.itracki.com/2011/06/favicon.png';
// Read image path, convert to base64 encoding
$imageData = base64_encode(file_get_contents($image));

// Format the image SRC:  data:{mime};base64,{data};
$src = 'data: ' . mime_content_type($image) . ';base64,' . $imageData;

// Echo out a sample image
echo '<img src="' . $src . '">';

9voto

MolhamStein Points 68

Vous pouvez placer vos données directement dans un url déclaration, comme :

src = 'url(imageData)';

Et pour obtenir les données de l'image, vous pouvez utiliser la fonction PHP :

$imageContent = file_get_contents("imageDir/" . $imgName);

$imageData = base64_encode($imageContent);

Ainsi, vous pouvez copier-coller la valeur de imageData et la coller directement dans votre URL et l'affecter à l'attribut src de votre image.

0 votes

Mais au bout du compte, il s'agit de HTML. Qu'est-ce que est la sortie HTML ?

8voto

David Spector Points 31

Le caractère + apparaissant dans un URI de données doit être codé comme %2B. Cela revient à coder toute autre chaîne dans un URI. Par exemple, les séparateurs d'arguments ( ? et &) doivent être encodés lorsqu'un URI avec un argument est envoyé comme partie d'un autre URI.

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