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

将画布的内容发送到Java服务器并将其保存为图像,java,javascript,canvas,Java,Javascript,Canvas,好的,基本上我开发了一个简单的图像上传系统。用户选择一个本地图像(使用HTML5文件/文件阅读器API),并能够在确认结果之前对其进行裁剪 最终结果在画布中查看,以便将其发送到我正在使用toDataURL的服务器。后端服务器是一个NodeJS服务器,它需要对Java服务器进行REST调用,Java服务器将根据数据创建一个映像文件并将其保存到磁盘 toDataURL的结果格式为:数据:image/png;base64,编码数据 我需要在Java服务器上做什么才能将字符串转换为正确的二进制表示形式?

好的,基本上我开发了一个简单的图像上传系统。用户选择一个本地图像(使用HTML5文件/文件阅读器API),并能够在确认结果之前对其进行裁剪

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

toDataURL的结果格式为:数据:image/png;base64,编码数据


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

您需要删除
数据:image/png;base64,
部分和其余部分。

一旦base64对字符串进行解码,就会得到PNG文件形式的二进制图像。有关如何将base64字符串解码为字节的详细信息,请参阅。

您必须将空格替换为+如果base64图像具有空格字符,则必须删除数据:image/png;base64,从base64映像的开始。除非替换空格字符,否则无法获得正确的图像。然后可以使用Base64解码

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    
     }

    }
}
yourBase64String=yourBase64String.replace(“”,“+”)

yourBase64String=yourBase64String.substring(22)

见:可能重复的