ImageIO.write 的写入器无效

问题描述

Quarkus / JSF / Primefaces 项目。

我正在尝试将调整大小的图像转换回字节数组,并且我不断收到 falsevalidWriter,因此返回的字节数组为空。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...