我正在尝试将 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/