2012-01-09 34 views
8

Được rồi, về cơ bản tôi đã phát triển một hệ thống tải lên hình ảnh đơn giản. Người dùng chọn một hình ảnh cục bộ (sử dụng API File/FileReader của HTML5) và có khả năng cắt nó trước khi xác nhận kết quả.Gửi nội dung của canvas đến máy chủ Java và lưu nó thành hình ảnh

Kết quả cuối cùng được xem trong canvas để gửi đến máy chủ tôi đang sử dụng toDataURL. Các máy chủ phụ trợ là một máy chủ NodeJS mà sau đó cần phải thực hiện một cuộc gọi REST đến một máy chủ Java mà sẽ tạo ra một tập tin hình ảnh từ dữ liệu và lưu nó vào đĩa.

Kết quả của toDataURL có dạng: dữ liệu: hình ảnh/png; base64, ENCODED DATA.

Tôi cần gì trên máy chủ Java để chuyển đổi chuỗi thành dạng đại diện nhị phân phù hợp?

+1

Xem: http://stackoverflow.com/questions/469695/decode-base64-data-in-java –

+0

có thể trùng lặp với [Tải lên 'canvas' dữ liệu hình ảnh lên máy chủ] (http://stackoverflow.com/ câu hỏi/1590965/tải lên-canvas-hình ảnh-dữ liệu đến máy chủ) –

Trả lời

1

Khi bạn giải mã Base64 chuỗi, bạn sẽ có hình ảnh nhị phân, dưới dạng tệp PNG. Xem this SO question để biết chi tiết về cách giải mã chuỗi base64 thành byte.

5
import java.awt.image.BufferedImage; 
import java.io.ByteArrayInputStream; 
import java.io.File; 
import javax.imageio.ImageIO; 
import javax.xml.bind.DatatypeConverter; 

public class test { 
    public static void main (String[] args){ 
    try{ 
      // remove data:image/png;base64, and then take rest sting 
      String img64 = "64 base image data here"; 
     byte[] decodedBytes = DatatypeConverter.parseBase64Binary(img64); 
     BufferedImage bfi = ImageIO.read(new ByteArrayInputStream(decodedBytes));  
     File outputfile = new File("saved.png"); 
     ImageIO.write(bfi , "png", outputfile); 
     bfi.flush(); 
    }catch(Exception e) 
     { 
      //Implement exception code  
    } 

    } 
} 
0

Bạn phải thay không gian với + nếu base64Image bạn có không gian char, sau đó bạn phải loại bỏ dữ liệu: image/png; base64, từ đầu base64Image. Trừ khi bạn thay thế không gian char, bạn không thể có được hình ảnh chính xác. sau đó bạn có thể sử dụng giải mã Base64

yourBase64String = yourBase64String.replace ('', '+');

yourBase64String = yourBase64String.substring (22);

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