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

标签 java struts2

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

开头的字符串

data:image/png;base64,

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

方法一

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 中的任何内容)。

方法二

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 commons 编解码器库,版本为 1.2。

我做错了什么吗?

最佳答案

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

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

关于java - 如何将图像作为字符串转换为 PNG 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15477152/

相关文章:

java - 如何将十六进制IP字符串转换为IP4点分字符串...

java - while true try catch 嵌套

java - Struts 2.s :property. 如何获取名称作为参数传递给jsp的变量的值?

Struts2 与 Tiles 2.1 或 2.2

java - 集群应用程序环境中的 ServletContex 属性

java - Android/GoogleDrive 图片上传

java - 你能一步步解释一下如何在Jboss7.1的ejb模块中使用log4j吗?

java - 静态 Java 命令行解析器的生成器

java - Struts 检测到未处理的异常 : java. lang.NullPointerException

jsp - 没有为命名空间/和操作名称映射的操作。 - [未知位置]