【问题标题】:Sending the contents of a canvas to a Java server and saving it as an image将画布的内容发送到 Java 服务器并将其保存为图像
【发布时间】:2012-01-09 21:45:56
【问题描述】:
好的,基本上我已经开发了一个简单的图片上传系统。用户选择本地图像(使用 HTML5 File / FileReader API)并能够在确认结果之前对其进行裁剪。
最终结果在画布中查看,以便将其发送到我正在使用 toDataURL 的服务器。后端服务器是 NodeJS 服务器,然后需要对 Java 服务器进行 REST 调用,Java 服务器将从数据创建图像文件并将其保存到磁盘。
toDataURL 的结果格式为:data:image/png;base64, ENCODED DATA。
我需要在 Java 服务器上将字符串转换为正确的二进制表示形式吗?
【问题讨论】:
标签:
java
javascript
canvas
【解决方案2】:
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
}
}
}
【解决方案3】:
对字符串进行 Base64 解码后,您将获得 PNG 文件形式的二进制图像。有关如何将 base64 字符串解码为字节的详细信息,请参阅this SO question。
【解决方案4】:
如果你的base64Image有空格字符,你必须替换空格,然后你必须从base64Image的开头删除data:image/png;base64。除非您替换空格字符,否则您无法获得正确的图像。那么你可以使用Base64解码
yourBase64String = yourBase64String.replace(' ', '+');
yourBase64String = yourBase64String.substring(22);