2013-03-18 101 views
5

我使用jQuery插件叫做wPaint允许用户绘制自己的形象。我发送所得到的图像作为一个字符串到服务器作为与我如何转换图像作为字符串PNG文件

数据开始的字符串:图像/ PNG; BASE64,

我试图以下,但与两个i”中的方法这两种方法m无法存储图像。

方法1

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")); 

的BufferedImage bImageFromConvert为空,所以我得到,当文件被创建的异常(抛出:IllegalArgumentException)。

的Base64编码类是从Apache公地编解码器库,并为1.2版本。

有什么我做错了吗?

+0

图像如何被转换为:

$.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){ } }); 

在服务器侧,这是最后的代码发送数据到服务器一个字符串? – 2013-03-18 15:27:37

+0

在插件wPaint(实际上是一个jQuery插件)中,有一个将图像转换为字符串的函数。字符串被正确转换,如果你在客户端分配一个带有相同字符串的img src,就会显示图像。 – 2013-03-18 15:48:09

+1

然后你需要用相同的插件将它转换回字节。 – 2013-03-18 16:33:11

回答

5

最初我使用以下代码将数据发送到服务器。

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(); 
    } 
+0

该诀窍对我来说,只是一个小的更正:而不是Base64.decodeBase64(imageData.getBytes()),我使用:Base64。getDecoder()。解码((imageData.getBytes())) – bks 2015-01-20 10:22:47

0

看来,你想与您的Base64编码的数据一起进行解码data:image/png'base64?在将Base64数据解码为图像字节之前,您需要将其从输入字符串中移除。

而且,你不想字符串作为字节只是作为一个字符串解码...。

+0

你能分享一些代码片段吗?我不太确定apis会允许我使用字符串作为输入来编写图像文件。 – 2013-03-18 13:12:41

+0

base64数据是字节数据的字符串编码。当您解码base64编码的字符串时,它将成为一个再次包含图像数据的字节数组。一旦你剥离我的答案中建议的非编码数据。 – cjstehno 2013-03-18 13:17:55

+0

已经尝试太(即的imageData = imageData.substring未做的伎俩。 – 2013-03-18 13:20:02

相关问题