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

时间:2012-01-09 21:45:57

标签: java javascript canvas

好的,基本上我已经开发了一个简单的图像上传系统。用户选择本地图像(使用HTML5文件/ FileReader API),并且能够在确认结果之前裁剪它。

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

toDataURL的结果形式为:data:image / png; base64,ENCODED DATA。

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

4 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分: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    
     }

    }
}

答案 2 :(得分:1)

对字符串进行Base64解码后,您将获得PNG文件形式的二进制图像。有关如何将base64字符串解码为字节的详细信息,请参阅this SO question

答案 3 :(得分:1)

如果你的base64Image有空格字符,你必须用<+替换空格,然后你必须从base64Image的开头删除数据:image / png; base64。除非您替换空格char,否则无法获得正确的Image。然后你可以使用Base64解码

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

yourBase64String = yourBase64String.substring(22);