2013-04-02 40 views
26

Tôi có biểu mẫu đăng ký nơi người dùng có thể chọn hình đại diện. Họ có 2 khả năng:Cách lấy dữ liệu được mã hóa base64 từ hình ảnh html

  1. Chọn một avatar mặc định
  2. Tải lên avatar của mình

Trong trang HTML của tôi, tôi có điều này.

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

Nó sẽ hiển thị hình đại diện đã chọn. Tôi sử dụng Tệp Api để cho phép người dùng tải lên hình ảnh của riêng họ. Điều đó làm cho src của hình ảnh HTML thành một cái gì đó như thế này.

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

Khi họ đăng biểu mẫu đăng ký. Dữ liệu sẽ được gửi đến một dịch vụ REST. Tôi có thể gửi dữ liệu mã hóa base64 khi người dùng tải lên hình đại diện. Nhưng làm cách nào để xử lý hình đại diện mặc định? Đó là một url thay vì dữ liệu được mã hóa base64.

+3

Đơn giản chỉ cần chuyển đổi avatar mặc định để hình ảnh base64 –

+0

Ok, thanks cho nhận xét. – janseeuw

+1

Ở đây tôi đã chơi với jsFiddle, tải img từ thẻ trong canvas đang thực hiện .toDataURL(). – MichD

Trả lời

34

Bạn có thể thử sau mẫu 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

Mã đẹp! Một câu hỏi nữa. Đầu ra base64 luôn được giả định là dữ liệu PNG (ví dụ Canvas 'chuyển đổi' dữ liệu hình ảnh?), Nếu có, có cách nào để xác định kiểu dữ liệu thực của hình ảnh (số ma thuật?) Và thay đổi giao thức base64 kết quả tờ khai? –

+0

Tôi (bắt đầu) chấp nhận rằng chúng ta cần tạo phần tử canvas để tạo mã hóa, tuy nhiên ưu tiên của tôi là tạo mã theo js thay vì phải xem mã phân phối với phần giữ chỗ (trường hợp sử dụng của tôi yêu cầu một vài hình ảnh) - giống như câu trả lời tương tự này: http://stackoverflow.com/a/22172860/1177832 – danwild

+0

Nếu src là hình ảnh svg –

9

Bạn cũng có thể sử dụng lớp FileReader:

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

Nhưng sau đó, tệp sẽ cần phải ở định dạng blob: / – yashas123

Các vấn đề liên quan