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

时间:2013-03-18 12:43:45

标签: java struts2

我正在使用一个名为wPaint的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"));

BufferedImage bImageFromConvert为null,因此在创建文件时出现异常(IllegalArgumentException)。

Base64类来自apache commons编解码器库,版本为1.2。

我有什么问题吗?

2 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:0)

您似乎正在尝试将data:image/png'base64与Base64编码数据一起解码?在将Base64数据解码为图像字节之前,您需要从输入字符串中删除它。

此外,您不希望将字符串解码为字节...就像字符串一样。