2013-04-02 8 views
26

Ho un modulo di registrazione in cui gli utenti possono scegliere un avatar. Hanno 2 possibilità:Come ottenere i dati codificati base64 dall'immagine html

  1. Scegli un avatar di default
  2. caricare i propri avatar

Nella mia pagina HTML ho questo.

<img id="preview" src="img/default_1.png"> 

Visualizza l'avatar selezionato. Uso il file Api per consentire agli utenti di caricare la propria immagine. Ciò rende l'src dell'immagine HTML simile a questa.

<img id="preview" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgA... /> 

Quando pubblicano il modulo di registrazione. I dati verranno inviati a un servizio REST. Posso inviare i dati codificati Base64 quando un utente ha caricato lui stesso un avatar. Ma come gestisco l'avatar predefinito? È un url invece di dati codificati in base64.

+3

semplicemente convertire l'avatar di default immagine base64 a –

+0

Ok, grazie per il commento. – janseeuw

+1

Qui stavo giocando con jsFiddle, caricando img dal tag in canvas e facendo .toDataURL(). – MichD

risposta

34

Si può provare seguente esempio http://jsfiddle.net/xKJB8/3/

<img id="preview" src="http://www.gravatar.com/avatar/0e39d18b89822d1d9871e0d1bc839d06?s=128&d=identicon&r=PG"> 
<canvas id="myCanvas" /> 

var c = document.getElementById("myCanvas"); 
var ctx = c.getContext("2d"); 
var img = document.getElementById("preview"); 
ctx.drawImage(img, 10, 10); 
alert(c.toDataURL()); 
+1

Bel codice! Un'altra domanda. L'output base64 sarà sempre considerato come dati PNG (l'istanza Canvas 'converte' i dati dell'immagine?), In tal caso, c'è un modo per identificare il tipo di dati reali dell'immagine (numeri magici?) E cambiare il protocollo risultante base64 dichiarazione? –

+0

Io (a malincuore) accetto che abbiamo bisogno di creare un elemento canvas per generare la codifica, tuttavia la mia preferenza sarebbe di generarlo in js piuttosto che dover sparpagliare codice vista con segnaposto (il mio caso d'uso richiede alcune immagini) - come questa risposta simile: http://stackoverflow.com/a/22172860/1177832 – danwild

+0

Cosa succede se lo src è un'immagine SVG –

9

È inoltre possibile utilizzare la classe FileReader:

var reader = new FileReader(); 
    reader.onload = function (e) { 
     var data = this.result; 
    } 
    reader.readAsDataURL(file); 
+0

Tuttavia, il file dovrà essere in formato blob: / – yashas123

Problemi correlati