645 votes

Comment convertir une image en chaîne base64 à l'aide de javascript ?

J'ai besoin de convertir mon image en une chaîne base64 afin de pouvoir l'envoyer à un serveur. Existe-t-il un fichier js pour cela... ? Sinon, comment le convertir ?

5 votes

D'où vient votre image ?

1 votes

1048voto

HaNdTriX Points 4753

Essayez ça :

Code

/**
 * Convert an image 
 * to a base64 string
 * @param  {String}   url         
 * @param  {Function} callback    
 * @param  {String}   [outputFormat=image/png]           
 */
function convertImgToBase64(url, callback, outputFormat){
    var canvas = document.createElement('CANVAS'),
        ctx = canvas.getContext('2d'),
        img = new Image;
    img.crossOrigin = 'Anonymous';
    img.onload = function(){
        var dataURL;
        canvas.height = img.height;
        canvas.width = img.width;
        ctx.drawImage(img, 0, 0);
        dataURL = canvas.toDataURL(outputFormat);
        callback.call(this, dataURL);
        canvas = null; 
    };
    img.src = url;
}

Utilisation

convertImgToBase64('http://bit.ly/18g0VNp', function(base64Img){
    // Base64DataURL
});

Formats d'entrée pris en charge

  • image/png
  • image/jpeg
  • image/jpg
  • image/gif
  • image/bmp
  • image/tiff
  • image/x-icône
  • image/svg+xml
  • image/webp
  • image/xxx

Formats de sortie pris en charge

  • image/png
  • image/jpeg
  • image/webp (chrome)

Démonstration :

http://jsfiddle.net/handtrix/YvQ5y/

Advanced-Code :

https://gist.github.com/HaNdTriX/7704632

Test : type de mime toDataUrl

http://kangax.github.io/jstests/toDataUrl_mime_type_test/

Support des navigateurs (à ce jour)

0 votes

Êtes-vous sûr d'utiliser IE11 ? Je viens de le tester dans IE11 et il a bien fonctionné pour moi. Mais je l'ai également testé dans IE10 et j'ai obtenu une erreur de sécurité car IE10 ne prend pas en charge CORS pour les images. Il se peut que vous deviez faire passer vos images par votre propre domaine pour que cela fonctionne dans IE10.

0 votes

Lorsque j'essaie de l'utiliser, l'image GIF indique toujours ceci sous sa forme base64 : data:image/png;base64................ ils devraient dire image/gif. J'ai essayé de passer l'image/gif dans la variable outputFormat en récupérant le format de l'image, mais elle affiche toujours data:image/png... Pourquoi ?

0 votes

Le format GIF n'est pas pris en charge comme format de sortie. Plus d'informations @ developer.mozilla.org/fr/US/docs/Web/API/ (J'ai mis à jour ma réponse pour clarifier ce point)

220voto

ThiefMaster Points 135805

Vous pouvez utiliser le HTML5 <canvas> pour cela :

Créez un canevas, chargez-y votre image et utilisez ensuite toDataURL() pour obtenir la représentation en base64 (en fait, c'est une data: URL mais elle contient l'image codée en base64).

3 votes

Fait toDataURL donner le contrôle sur les callbacks tels que done/fail/always comme c'est le cas pour xhr ?

0 votes

Peut-on extraire 2 ou plusieurs canevas en un seul PNG ?

219 votes

Pouvez-vous s'il vous plaît faire un jsbin ou au moins écrire un peu de code ici ?

5voto

Artem Tikhomirov Points 4501

Vous pourriez utiliser FileAPI mais il n'est pas soutenu.

5voto

ajeet lakhani Points 158

Pour autant que je sache, l'image peut être convertie en chaîne de caractères base64 soit par FileReader(), soit en la stockant dans l'élément canvas et en utilisant ensuite toDataURL() pour obtenir l'image.

Convertir une image en canevas qui est déjà chargé

3voto

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