Java 如何将图像作为字符串转换为PNG文件

Java 如何将图像作为字符串转换为PNG文件,java,struts2,Java,Struts2,我正在使用一个名为jQuery的插件,允许用户绘制自己的图像。我将结果图像作为字符串发送到服务器,作为以开头的字符串 数据:图像/png;base64 我尝试了下面两种方法,但两种方法都无法存储图像 方法1 String imageData = parameterParser.getStringParameter("image", ""); byte[] imgByteArray = Base64.decodeBase64(imageData.getBytes()); FileOutputSt

我正在使用一个名为jQuery的插件,允许用户绘制自己的图像。我将结果图像作为字符串发送到服务器,作为以开头的字符串

数据:图像/png;base64

我尝试了下面两种方法,但两种方法都无法存储图像

方法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"));
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()))