jai-imageio / jai-imageio-core

JAI ImageIO Core (without javax.media.jai dependencies)
Other
234 stars 87 forks source link

"javax.imageio.IIOException: No SOF segment in stream" when using JPEG compression in a TIFF #54

Closed THausherr closed 6 years ago

THausherr commented 6 years ago

Test code:

    @Test
    public void TestWriteRead() throws IOException
    {
        BufferedImage image = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB);

        ImageWriter writer = ImageIO.getImageWritersByFormatName("tif").next();
        ImageWriteParam param = writer.getDefaultWriteParam();
        IIOMetadata metadata = writer.getDefaultImageMetadata(new ImageTypeSpecifier(image), param);

        System.out.println(writer);
        System.out.println(param);
        System.out.println(metadata);

        param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
        param.setCompressionType("JPEG"); // https://download.java.net/media/jai-imageio/javadoc/1.1/com/sun/media/imageio/plugins/tiff/TIFFImageWriteParam.html
        try (ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(new File("test.tif")))
        {
            System.out.println(imageOutputStream);
            writer.setOutput(imageOutputStream);
            writer.write(null, new IIOImage(image, null, metadata), param);
        }

        ImageReader reader = ImageIO.getImageReadersByFormatName("tif").next();
        System.out.println(reader);
        try (ImageInputStream imageInputStream = ImageIO.createImageInputStream(new File("test.tif")))
        {
            reader.setInput(imageInputStream);
            reader.read(0);
        }
    }

output:

com.github.jaiimageio.impl.plugins.tiff.TIFFImageWriter@20398b7c com.github.jaiimageio.plugins.tiff.TIFFImageWriteParam@3632be31 com.github.jaiimageio.impl.plugins.tiff.TIFFImageMetadata@5abca1e0 javax.imageio.stream.FileImageOutputStream@6b09bb57 com.github.jaiimageio.impl.plugins.tiff.TIFFImageReader@77ec78b9

javax.imageio.IIOException: No SOF segment in stream

THausherr commented 6 years ago

This issue may be invalid... I didn't get a proper stack trace last time, now that I got one, I see that it happens only if one uses the jpeg jar of twelvemonkeys and the rest from here:

Exception in thread "main" javax.imageio.IIOException: No SOF segment in stream
    at com.twelvemonkeys.imageio.plugins.jpeg.JPEGImageReader.getSOF(JPEGImageReader.java:762)
    at com.twelvemonkeys.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:334)
    at com.sun.media.imageioimpl.plugins.tiff.TIFFJPEGDecompressor.decodeRaw(TIFFJPEGDecompressor.java:224)
    at com.sun.media.imageio.plugins.tiff.TIFFDecompressor.decode(TIFFDecompressor.java:2527)
    at com.sun.media.imageioimpl.plugins.tiff.TIFFImageReader.decodeTile(TIFFImageReader.java:1137)
    at com.sun.media.imageioimpl.plugins.tiff.TIFFImageReader.read(TIFFImageReader.java:1417)