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

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

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

toDataURL的结果采用以下forms:data:image / png; base64,ENCODED DATA。

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

您需要删除data:image/png;base64, part和base 64解码其余数据。

 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 } } } 

一旦你对字符串进行Base64解码,你就会得到一个PNG文件forms的二进制图像。 有关如何将base64字符串解码为字节的详细信息,请参阅此SO问题 。

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

yourBase64String = yourBase64String.replace(”,’+’);

yourBase64String = yourBase64String.substring(22);