Java ImageIO.write具有无效的写入程序
Quarkus/JSF/Primefaces项目 我正在尝试将一个调整大小的图像转换回字节数组,我不断得到Java ImageIO.write具有无效的写入程序,java,javax.imageio,Java,Javax.imageio,Quarkus/JSF/Primefaces项目 我正在尝试将一个调整大小的图像转换回字节数组,我不断得到validWriter的false,因此,返回的字节数组是空的 private byte[] createBytesFromImage(BufferedImage image, String contentType) { ByteArrayOutputStream baosToReturn = new ByteArrayOutputStream(); try
validWriter
的false
,因此,返回的字节数组是空的
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();
}
仔细看。第二个参数(字符串)允许有哪些值?您传递的是哪种类型的值?实际上有一个方法
ImageIO.getImageWritersByMIMEType(String)
,您可以使用该方法为给定的内容类型获取正确的ImageWriter
。不幸的是,没有类似的便利方法,如写入(图像、内容类型、输出)
。。。在大多数情况下,从内容类型中剥离“image/”
就足够了,这是一个更简单的解决方案。