Java 如何将图像作为字符串转换为PNG文件
我正在使用一个名为jQuery的插件,允许用户绘制自己的图像。我将结果图像作为字符串发送到服务器,作为以开头的字符串 数据:图像/png;base64 我尝试了下面两种方法,但两种方法都无法存储图像 方法1Java 如何将图像作为字符串转换为PNG文件,java,struts2,Java,Struts2,我正在使用一个名为jQuery的插件,允许用户绘制自己的图像。我将结果图像作为字符串发送到服务器,作为以开头的字符串 数据:图像/png;base64 我尝试了下面两种方法,但两种方法都无法存储图像 方法1 String imageData = parameterParser.getStringParameter("image", ""); byte[] imgByteArray = Base64.decodeBase64(imageData.getBytes()); FileOutputSt
String imageData = parameterParser.getStringParameter("image", "");
byte[] imgByteArray = Base64.decodeBase64(imageData.getBytes());
FileOutputStream fileOutputStream = new FileOutputStream("/home/arvind/Desktop/test.png");
fileOutputStream.write(imgByteArray);
fileOutputStream.close();
在这种情况下,文件被写入,但不显示图像。但是,当我删除文件扩展名时,我会得到发送到服务器的字符串(即imageData中的任何内容)
方法2
String imageData = parameterParser.getStringParameter("image", "");
byte[] imgByteArray = Base64.decodeBase64(imageData.getBytes());
InputStream in = new ByteArrayInputStream(imgByteArray);
BufferedImage bImageFromConvert = ImageIO.read(in);
ImageIO.write(bImageFromConvert, "png", new File("/home/arvind/Desktop/test.png"));
BuffereImage bImageFromConvert为null,因此在创建文件时会出现异常(IllegalArgumentException)
Base64类来自apache commons编解码器库,版本为1.2
我做错什么了吗 似乎您正在尝试解码
数据:image/png'base64
以及您的base64编码数据?在将Base64数据解码为图像字节之前,您需要将其从输入字符串中删除
另外,您不希望将字符串解码为字节。。。就像字符串一样。最初,我使用以下代码将数据发送到服务器
$.ajax({
url : '/campaign/holiImageUpload.action',
type : 'POST',
data : "image=" + $("#wPaint2").wPaint("image")
success :function(data){
}
});
现在,我使用以下代码将数据发送到服务器
var imgData = $("#wPaint2").wPaint("image");
$.ajax({
url : '/campaign/holiImageUpload.action',
type : 'POST',
data : {image : imgData},
success :function(data){
}
});
在服务器端,这是最终代码:
String imageData = parameterParser.getStringParameter("image", "");
try {
imageData = imageData.substring(22);
byte[] imgByteArray = Base64.decodeBase64(imageData.getBytes());
InputStream in = new ByteArrayInputStream(imgByteArray);
BufferedImage bufferedImage = ImageIO.read(in);
ImageIO.write(bufferedImage, "png", new File("/home/arvind/Desktop/test.png"));
catch(Exception ex){
ex.printStrackTrace();
}
你能分享一些代码片段吗?我不太确定哪些API允许我使用字符串本身作为输入来编写图像文件。base64数据是字节数据的字符串编码。当您解码base64编码字符串时,它将再次成为一个字节数组,其中包含图像的数据。一旦你按照我的回答中的建议去掉非编码数据,你也已经尝试过了(即imageData=imageData.substring(22)…这并没有起作用。我建议提供一个小图像请求的字符串转储,这样我们就可以准确地看到后端读取的内容。给你-如何将图像转换为字符串?在插件wPaint中(实际上是一个jQuery插件),有一个函数可以将图像转换为字符串。该字符串被正确转换,因为如果您在客户端使用相同的字符串分配img src,则会显示该图像。然后,您需要使用相同的插件将其转换回字节。这对我来说很管用,只是一个小的更正:而不是Base64.decodeBase64(imageData.getBytes()),我使用了:Base64.getDecoder().decode((imageData.getBytes()))