Как решить: javax.imageio.IIOException: фиктивное входное цветовое пространство - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть функция generateImageOutput ниже, чтобы записать BufferedImage в файл JPEG.

public boolean generateImageOutput(BufferedImage image, String filename){
        //The image is written to the file by the writer
        File file = new File( projectFolder+"/data/"+filename+".jpg");
        //Iterator containing all ImageWriter (JPEG)
        Iterator encoder = ImageIO.getImageWritersByFormatName("JPEG");
        ImageWriter writer = (ImageWriter) encoder.next();
        //Compression parameter (best quality)
        ImageWriteParam param = writer.getDefaultWriteParam();
        param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
        param.setCompressionQuality(1.0f);
        //Try to write the image
        try{
            ImageOutputStream outputStream = ImageIO.createImageOutputStream(file);
            writer.setOutput(outputStream);
            writer.write(null, new IIOImage(image, null, null), param);
            outputStream.flush();
            writer.dispose();
            outputStream.close();
        }catch(IOException e){
            e.printStackTrace();
            System.out.println(e.toString());
            return false;
        }
        return true;
    }

Это работает для некоторых, но не работает для BufferedImage, преобразованного из строки base64:

String encodedString = JSON.parseObject(string).getString("image");
byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
ByteArrayInputStream bis = new ByteArrayInputStream(decodedBytes);
buffered_image = ImageIO.read(bis);

При записи вышеупомянутого buffered_image в jpeg с использованием generateImageOutput возникает исключение:

javax.imageio.IIOException: Bogus input colorspace
    at java.desktop/com.sun.imageio.plugins.jpeg.JPEGImageWriter.writeImage(Native Method)
    at java.desktop/com.sun.imageio.plugins.jpeg.JPEGImageWriter.writeOnThread(JPEGImageWriter.java:1007)
    at java.desktop/com.sun.imageio.plugins.jpeg.JPEGImageWriter.write(JPEGImageWriter.java:371)

Строка encodedString не имеет проблем, я успешно преобразовал ее в изображение в Интернете.

Как разрешить исключение?

1 Ответ

1 голос
/ 24 февраля 2020

Наконец я обнаружил, что причина в том, что на изображении есть канал АЛЬФА.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...