问题描述
Quarkus / JSF / Primefaces 项目。
我正在尝试将调整大小的图像转换回字节数组,并且我不断收到 false
的 validWriter
,因此返回的字节数组为空。
private byte[] createBytesFromImage(BufferedImage image,String contentType) {
ByteArrayOutputStream baosToReturn = new ByteArrayOutputStream();
try {
boolean validWriter = ImageIO.write(image,contentType,baosToReturn);
if (!validWriter) {
logger.error("Not a Valid Writer");
}
} catch (IOException e) {
baosToReturn = null;
logger.error("Error trying to convert image " + e);
e.printstacktrace();
}
return baosToReturn.toByteArray();
}
解决方法
啊啊啊。
传递 contentType(来自上传的图片)不起作用。
你需要给图片一段文字,比如 “png”...
boolean validWriter = ImageIO.write(image,"png",baosToReturn);
一起去:
// https://stackoverflow.com/questions/67081086/imageio-write-has-invalid-writer
private byte[] createBytesFromImage(BufferedImage image,String contentType) {
ByteArrayOutputStream baosToReturn = new ByteArrayOutputStream();
String[] splitString = contentType.split("/");
if (splitString.length == 0) {
logger.error("++++++++++++++++++++++++++ content type cannot be split");
} else {
if (splitString.length != 2) {
logger.error("++++++++++++++++++++++++++ content type cannot be split to two parts (e.g. image and png)");
} else {
logger.info("contentType is split down to " + splitString[0] + " and " + splitString[1]);
if (!splitString[0].equalsIgnoreCase("image")) {
logger.error("++++++++++++++++++++++++++ content type first part is not image");
} else {
try {
boolean validWriter = ImageIO.write(image,splitString[1],baosToReturn);
if (!validWriter) {
logger.error("Could not find a Valid Image Writer");
}
} catch (IOException e) {
baosToReturn = null;
logger.error("Error trying to convert image " + e);
e.printStackTrace();
}
}
}
}
return baosToReturn.toByteArray();
}