java - Base64 到 ImageIO

标签 java image jsp base64 javax.imageio

我正在尝试将 base64 字符串转换为 imageIO 并保存它。

在更大的背景下,我正在创建一个脚本,以便用户可以上传图像、裁剪图像并将其另存为个人资料图像。我从这个裁剪后的图像中获取一个 Base64 字符串,并将其发送到 servlet。 (是的,我正在使用 Java Server Pages)

问题是这样的: 当我执行以下代码时,我在方法 decodeToImage 中的变量 Image 上得到一个空指针。

我尝试使用其他几个库来解码 Base64,但还没有结果。 我尝试使用其他图像转换脚本,但没有成功。

在我看来,这段代码应该可以工作。我错过了什么吗?

提前致谢!

欢迎所有反馈!

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);

    if(request.getParameter("upload-CroppedImage") != null){


        BufferedImage newImage = decodeToImage(request.getParameter("croppedImage"));

        File outputfile = new File("F:\\Users\\Joery v2\\Pictures\\saved.jpg");
        ImageIO.write(newImage, "jpg", outputfile);
    }
}

public static BufferedImage decodeToImage(String imageString) {

    try {
        byte[] imgBytes = parseBase64Binary(imageString);
         BufferedImage image = ImageIO.read(new ByteArrayInputStream(imgBytes));
         return image;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

*这是来自 servlet 的代码。

堆栈跟踪:

Info:   GameZ_Website was successfully deployed in 2.076 milliseconds.
Warning:   StandardWrapperValve[CroppingImage]: Servlet.service() for servlet CroppingImage threw exception
java.lang.IllegalArgumentException: image == null!
    at javax.imageio.ImageTypeSpecifier.createFromRenderedImage(ImageTypeSpecifier.java:925)
    at javax.imageio.ImageIO.getWriter(ImageIO.java:1592)

最佳答案

尝试此代码,以避免解码/编码循环,并查看您的图像是否符合预期:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    processRequest(request, response);

    if (request.getParameter("upload-CroppedImage") != null) {
        String dataURI = request.getParameter("croppedImage");
        String data = dataURI.substring(dataURI.indexOf(',')); // TODO: Input validation
        byte[] imgBytes = parseBase64Binary(data);

        File outputfile = new File("F:\\Users\\Joery v2\\Pictures\\saved.jpg");
        writeBytesToFile(imgBytes, outputFile);
    }
}

private void writeBtesToFile(byte[] bytes, File file) {
    OutputStream out;

    try {
        out = new FileOutputStream(file);
        out.write(bytes);
    } 
    finally {
        out.close();
    }
}

关于java - Base64 到 ImageIO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23864896/

相关文章:

用于绘制图像的 Java Graphics2D 方法,其中使用像素 alpha 值,但颜色值替换为给定颜色

java - 通过abs解析相对图像URL失败

java - 从 Servlet 发送 ArrayList<Product> 并在 JSP 中接收

java - 重置 : Chaining multiple routers with different authentication methods

java - 如何有效地搜索字符串

jquery垂直滑动在网格上扩展图像库

java - 在 JSP 中使用 MySQL 连接到 Tomcat 服务器

java - 如何从 FileOutputStream 对象中检索 String 值?

java - Spring Flux缓存项是如何管理的

java - 如何在 JSP 中将错误消息打印到用户屏幕而不是标准输出?