2013-04-02 11 views
26

Mam formularz rejestracyjny, w którym użytkownicy mogą wybrać awatar. Mają 2 możliwości:Jak uzyskać kodowane base64 dane z obrazu html

  1. Wybierz domyślny awatar
  2. Prześlij swój awatar

W mojej stronie HTML Mam to.

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

Wyświetla wybrany avatar. Używam File Api, aby umożliwić użytkownikom przesyłanie własnego obrazu. To sprawia, że ​​src obrazu HTML jest podobny do tego.

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

Po zaksięgowaniu formularza rejestracyjnego. Dane zostaną przesłane do usługi REST. Mogę wysłać dane zakodowane w Base64, gdy użytkownik sam załaduje awatar. Ale jak mam obsłużyć domyślny awatar? Jest to adres URL zamiast danych kodowanych base64.

+3

Wystarczy przekonwertować domyślny awatar do base64 obrazu –

+0

Ok, dzięki za komentarz. – janseeuw

+1

Tutaj grałem z jsFiddle, ładując img z tagu na płótnie robiąc .toDataURL(). – MichD

Odpowiedz

34

Można spróbować Poniższy przykładowy 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

Ładny kod! Jeszcze jedno pytanie. Czy na wyjściu base64 zawsze będą przyjmowane dane PNG (czy instancja Canvas "konwertuje" dane obrazu?), Jeśli tak, czy istnieje sposób identyfikacji prawdziwego typu danych obrazu (magiczne liczby?) I zmiany wynikowego protokołu base64 deklaracja? –

+0

Ja (niechętnie) przyjmuję, że musimy stworzyć element canvas w celu wygenerowania kodowania, jednak wolałabym wygenerować go w js zamiast klikać widoków z symbolami zastępczymi (mój przypadek użycia wymaga kilku obrazów) - podobna odpowiedź: http://stackoverflow.com/a/22172860/1177832 – danwild

+0

Co zrobić, jeśli src jest obrazem svg –

9

Można również użyć klasy FileReader:

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

Ale wtedy plik będzie musiał być w formacie blob: / – yashas123

Powiązane problemy