将画布的内容发送到Java服务器并将其保存为图像

问题描述:

好吧,基本上我开发了一个简单的图像上传系统。用户选择本地图像(使用HTML5 File/FileReader API),并且能够在确认结果之前对其进行裁剪。将画布的内容发送到Java服务器并将其保存为图像

最终结果在画布中查看,以便将其发送到我使用toDataURL的服务器。后端服务器是一个NodeJS服务器,然后需要对Java服务器进行REST调用,该服务器将从数据创建映像文件并将其保存到磁盘。

toDataURL的结果格式如下:data:image/png; base64,ENCODED DATA。

我需要在Java服务器上将字符串转换为适当的二进制表示形式吗?

+1

请参阅:http://*.com/questions/469695/decode-base64-data-in-java – 2012-01-09 21:51:42

+0

[上传'canvas'图像数据到服务器](http://*.com/问题/ 1590965 /上载-画布图像数据到所述服务器) – 2012-01-09 21:53:28

您需要删除data:image/png;base64,部分和base 64 decode其余部分。

一旦你Base64解码字符串,你将有一个PNG文件的形式的二进制图像。有关如何将base64字符串解码为字节的详细信息,请参阅this SO question

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  
    } 

    } 
} 

你必须用+,如果你的base64Image有空间字符,那么你必须删除数据替换空间:图像/ PNG; BASE64,从base64Image的开始。除非您替换空格字符,否则无法获得正确的图像。那么你可以使用Base64解码

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

yourBase64String = yourBase64String.substring(22);