diff --git a/imageio/imageio-jpeg-jai-interop/pom.xml b/imageio/imageio-jpeg-jai-interop/pom.xml new file mode 100644 index 00000000..a87cc5f5 --- /dev/null +++ b/imageio/imageio-jpeg-jai-interop/pom.xml @@ -0,0 +1,40 @@ + + + 4.0.0 + + com.twelvemonkeys.imageio + imageio + 3.7-SNAPSHOT + + imageio-jpeg-jai-interop + TwelveMonkeys :: ImageIO :: JPEG/JAI TIFF Interop + + Test JPEG plugin and JAI TIFF plugin interoperability + + + + + com.github.jai-imageio + jai-imageio-core + 1.3.0 + + + com.twelvemonkeys.imageio + imageio-core + + + com.twelvemonkeys.imageio + imageio-core + test-jar + test + + + com.twelvemonkeys.imageio + imageio-metadata + + + com.twelvemonkeys.imageio + imageio-jpeg + + + diff --git a/imageio/imageio-jpeg-jai-interop/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/jaiinterop/JAITIFFImageReaderInteroperabilityTest.java b/imageio/imageio-jpeg-jai-interop/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/jaiinterop/JAITIFFImageReaderInteroperabilityTest.java new file mode 100644 index 00000000..6401059a --- /dev/null +++ b/imageio/imageio-jpeg-jai-interop/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/jaiinterop/JAITIFFImageReaderInteroperabilityTest.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2021, Harald Kuhr + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package com.twelvemonkeys.imageio.plugins.jpeg.jaiinterop; + +import com.twelvemonkeys.imageio.plugins.jpeg.JPEGImageReaderSpi; +import com.twelvemonkeys.imageio.util.ImageReaderAbstractTest; + +import org.junit.Ignore; +import org.junit.Test; + +import javax.imageio.ImageIO; +import javax.imageio.ImageReader; +import javax.imageio.spi.IIORegistry; +import javax.imageio.spi.ImageReaderSpi; +import javax.imageio.spi.ServiceRegistry; +import java.awt.*; +import java.util.Arrays; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; + +import static org.junit.Assert.fail; + +/** + * Tests the JAI TIFFImageReader delegating to our JPEGImageReader. + * + * @author Harald Kuhr + * @author last modified by $Author: haraldk$ + * @version $Id: JAITIFFImageReaderInteroperabilityTest.java,v 1.0 08.05.12 15:25 haraldk Exp$ + */ +public class JAITIFFImageReaderInteroperabilityTest extends ImageReaderAbstractTest { + private static final String JAI_TIFF_PROVIDER_CLASS_NAME = "com.github.jaiimageio.impl.plugins.tiff.TIFFImageReaderSpi"; + + @Override + protected ImageReaderSpi createProvider() { + Iterator providers = IIORegistry.getDefaultInstance().getServiceProviders(ImageReaderSpi.class, new ServiceRegistry.Filter() { + @Override + public boolean filter(final Object provider) { + return JAI_TIFF_PROVIDER_CLASS_NAME.equals(provider.getClass().getName()); + } + }, true); + + if (providers.hasNext()) { + return providers.next(); + } + + return null; + } + + @Override + protected List getTestData() { + return Arrays.asList( + new TestData(getClassLoaderResource("/tiff/foto_0001.tif"), new Dimension(1663, 2338)), // Little endian, Old JPEG + new TestData(getClassLoaderResource("/tiff/cmyk_jpeg.tif"), new Dimension(100, 100)), // CMYK, JPEG compressed, with ICC profile + new TestData(getClassLoaderResource("/tiff/jpeg-lossless-8bit-gray.tif"), new Dimension(512, 512)) // Lossless JPEG Gray, 8 bit/sample + ); + } + + @Override + protected List getFormatNames() { + return Collections.emptyList(); + } + + @Override + protected List getSuffixes() { + return Collections.emptyList(); + } + + @Override + protected List getMIMETypes() { + return Collections.emptyList(); + } + + @Ignore("Fails in TIFFImageReader") + @Override + public void testSetDestinationIllegal() { + } + + @Test + public void testReallyUsingOurJPEGImageReader() { + Iterator readers = ImageIO.getImageReadersByFormatName("JPEG"); + + if (readers.hasNext()) { + ImageReader reader = readers.next(); + + if ((reader.getOriginatingProvider() instanceof JPEGImageReaderSpi)) { + return; + } + } + + fail("Expected Spi not registered (dependency issue?): " + JPEGImageReaderSpi.class); + } +} diff --git a/imageio/imageio-jpeg-jai-interop/src/test/resources/tiff/cmyk_jpeg.tif b/imageio/imageio-jpeg-jai-interop/src/test/resources/tiff/cmyk_jpeg.tif new file mode 100644 index 00000000..85d0bc92 Binary files /dev/null and b/imageio/imageio-jpeg-jai-interop/src/test/resources/tiff/cmyk_jpeg.tif differ diff --git a/imageio/imageio-jpeg-jai-interop/src/test/resources/tiff/foto_0001.tif b/imageio/imageio-jpeg-jai-interop/src/test/resources/tiff/foto_0001.tif new file mode 100644 index 00000000..a8f80d87 Binary files /dev/null and b/imageio/imageio-jpeg-jai-interop/src/test/resources/tiff/foto_0001.tif differ diff --git a/imageio/imageio-jpeg-jai-interop/src/test/resources/tiff/jpeg-lossless-8bit-gray.tif b/imageio/imageio-jpeg-jai-interop/src/test/resources/tiff/jpeg-lossless-8bit-gray.tif new file mode 100755 index 00000000..dfa11295 Binary files /dev/null and b/imageio/imageio-jpeg-jai-interop/src/test/resources/tiff/jpeg-lossless-8bit-gray.tif differ diff --git a/imageio/imageio-jpeg-jep262-interop/pom.xml b/imageio/imageio-jpeg-jep262-interop/pom.xml new file mode 100644 index 00000000..9f1d0f5b --- /dev/null +++ b/imageio/imageio-jpeg-jep262-interop/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + com.twelvemonkeys.imageio + imageio + 3.7-SNAPSHOT + + imageio-jpeg-jep262-interop + TwelveMonkeys :: ImageIO :: JPEG/JEP-262 Interop + + Test JPEG plugin and JEP-262 (JDK TIFF plugin) interoperability + + + + + com.twelvemonkeys.imageio + imageio-core + + + com.twelvemonkeys.imageio + imageio-core + test-jar + test + + + com.twelvemonkeys.imageio + imageio-metadata + + + com.twelvemonkeys.imageio + imageio-jpeg + + + diff --git a/imageio/imageio-jpeg-jep262-interop/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/jep262interop/JEP262TIFFImageReaderInteroperabilityTest.java b/imageio/imageio-jpeg-jep262-interop/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/jep262interop/JEP262TIFFImageReaderInteroperabilityTest.java new file mode 100644 index 00000000..5b197393 --- /dev/null +++ b/imageio/imageio-jpeg-jep262-interop/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/jep262interop/JEP262TIFFImageReaderInteroperabilityTest.java @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2021, Harald Kuhr + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package com.twelvemonkeys.imageio.plugins.jpeg.jep262interop; + +import com.twelvemonkeys.imageio.plugins.jpeg.JPEGImageReaderSpi; +import com.twelvemonkeys.imageio.util.ImageReaderAbstractTest; + +import org.junit.Ignore; +import org.junit.Test; + +import javax.imageio.ImageIO; +import javax.imageio.ImageReader; +import javax.imageio.spi.IIORegistry; +import javax.imageio.spi.ImageReaderSpi; +import javax.imageio.spi.ServiceRegistry; +import java.awt.*; +import java.util.Arrays; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; + +import static org.junit.Assert.fail; +import static org.junit.Assume.assumeTrue; + +/** + * Tests the JEP 262 TIFFImageReader delegating to our JPEGImageReader. + * + * @author Harald Kuhr + * @author last modified by $Author: haraldk$ + * @version $Id: TIFFImageReaderTest.java,v 1.0 08.05.12 15:25 haraldk Exp$ + */ +public class JEP262TIFFImageReaderInteroperabilityTest extends ImageReaderAbstractTest { + private static final String JEP_262_PROVIDER_CLASS_NAME = "com.sun.imageio.plugins.tiff.TIFFImageReaderSpi"; + + @Override + protected ImageReaderSpi createProvider() { + Iterator providers = IIORegistry.getDefaultInstance().getServiceProviders(ImageReaderSpi.class, new ServiceRegistry.Filter() { + @Override + public boolean filter(final Object provider) { + return JEP_262_PROVIDER_CLASS_NAME.equals(provider.getClass().getName()) && ((ImageReaderSpi) provider).getVendorName().startsWith("Oracle"); + } + }, true); + + if (providers.hasNext()) { + return providers.next(); + } + + // Skip tests if we have no Spi (ie. pre JDK 9) + assumeTrue("Provider " + JEP_262_PROVIDER_CLASS_NAME + " not found", false); + + return null; + } + + @Override + protected List getTestData() { + return Arrays.asList( + new TestData(getClassLoaderResource("/tiff/foto_0001.tif"), new Dimension(1663, 2338)), // Little endian, Old JPEG + new TestData(getClassLoaderResource("/tiff/cmyk_jpeg.tif"), new Dimension(100, 100)), // CMYK, JPEG compressed, with ICC profile + new TestData(getClassLoaderResource("/tiff/jpeg-lossless-8bit-gray.tif"), new Dimension(512, 512)) // Lossless JPEG Gray, 8 bit/sample + ); + } + + @Override + protected List getFormatNames() { + return Collections.emptyList(); + } + + @Override + protected List getSuffixes() { + return Collections.emptyList(); + } + + @Override + protected List getMIMETypes() { + return Collections.emptyList(); + } + + @Ignore("Fails in TIFFImageReader") + @Override + public void testSetDestinationIllegal() { + } + + @Test + public void testReallyUsingOurJPEGImageReader() { + Iterator readers = ImageIO.getImageReadersByFormatName("JPEG"); + + if (readers.hasNext()) { + ImageReader reader = readers.next(); + + if ((reader.getOriginatingProvider() instanceof JPEGImageReaderSpi)) { + return; + } + } + + fail("Expected Spi not registered (dependency issue?): " + JPEGImageReaderSpi.class); + } +} diff --git a/imageio/imageio-jpeg-jep262-interop/src/test/resources/tiff/cmyk_jpeg.tif b/imageio/imageio-jpeg-jep262-interop/src/test/resources/tiff/cmyk_jpeg.tif new file mode 100644 index 00000000..85d0bc92 Binary files /dev/null and b/imageio/imageio-jpeg-jep262-interop/src/test/resources/tiff/cmyk_jpeg.tif differ diff --git a/imageio/imageio-jpeg-jep262-interop/src/test/resources/tiff/foto_0001.tif b/imageio/imageio-jpeg-jep262-interop/src/test/resources/tiff/foto_0001.tif new file mode 100644 index 00000000..a8f80d87 Binary files /dev/null and b/imageio/imageio-jpeg-jep262-interop/src/test/resources/tiff/foto_0001.tif differ diff --git a/imageio/imageio-jpeg-jep262-interop/src/test/resources/tiff/jpeg-lossless-8bit-gray.tif b/imageio/imageio-jpeg-jep262-interop/src/test/resources/tiff/jpeg-lossless-8bit-gray.tif new file mode 100755 index 00000000..dfa11295 Binary files /dev/null and b/imageio/imageio-jpeg-jep262-interop/src/test/resources/tiff/jpeg-lossless-8bit-gray.tif differ diff --git a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReader.java b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReader.java index 2a152f92..5cc68b09 100644 --- a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReader.java +++ b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReader.java @@ -636,6 +636,12 @@ public final class JPEGImageReader extends ImageReaderBase { try { if (imageInput != null) { + // Need to wrap stream to avoid messing with the byte order of the underlying stream + // in the case we are operating as a delegate for ie. TIFFImageReader. + if (!(imageInput instanceof SubImageInputStream)) { + imageInput = new SubImageInputStream(imageInput, Long.MAX_VALUE); + } + streamOffsets.add(imageInput.getStreamPosition()); } @@ -650,7 +656,7 @@ public final class JPEGImageReader extends ImageReaderBase { private void initDelegate(boolean seekForwardOnly, boolean ignoreMetadata) throws IOException { // JPEGSegmentImageInputStream that filters out/skips bad/unnecessary segments delegate.setInput(imageInput != null - ? new JPEGSegmentImageInputStream(new SubImageInputStream(imageInput, Long.MAX_VALUE), new JPEGSegmentWarningDelegate()) + ? new JPEGSegmentImageInputStream(imageInput, new JPEGSegmentWarningDelegate()) : null, seekForwardOnly, ignoreMetadata); } @@ -705,7 +711,6 @@ public final class JPEGImageReader extends ImageReaderBase { thumbnails = null; initDelegate(seekForwardOnly, ignoreMetadata); - initHeader(); } diff --git a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGSegmentImageInputStream.java b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGSegmentImageInputStream.java index f32f4d56..028071d7 100644 --- a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGSegmentImageInputStream.java +++ b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGSegmentImageInputStream.java @@ -67,7 +67,6 @@ final class JPEGSegmentImageInputStream extends ImageInputStreamImpl { private int currentSegment = -1; private Segment segment; - JPEGSegmentImageInputStream(final ImageInputStream stream, final JPEGSegmentWarningListener warningListener) { this.stream = notNull(stream, "stream"); this.warningListener = notNull(warningListener, "warningListener"); @@ -333,7 +332,7 @@ final class JPEGSegmentImageInputStream extends ImageInputStreamImpl { } private void streamInit() throws IOException { - stream.seek(0); + long position = stream.getStreamPosition(); try { int soi = stream.readUnsignedShort(); @@ -342,7 +341,7 @@ final class JPEGSegmentImageInputStream extends ImageInputStreamImpl { throw new IIOException(String.format("Not a JPEG stream (starts with: 0x%04x, expected SOI: 0x%04x)", soi, JPEG.SOI)); } - segment = new Segment(soi, 0, 0, 2); + segment = new Segment(soi, position, 0, 2); segments.add(segment); currentSegment = segments.size() - 1; // 0 diff --git a/imageio/imageio-tiff-jdk-interop/pom.xml b/imageio/imageio-tiff-jdk-interop/pom.xml new file mode 100644 index 00000000..6eb42888 --- /dev/null +++ b/imageio/imageio-tiff-jdk-interop/pom.xml @@ -0,0 +1,35 @@ + + + 4.0.0 + + com.twelvemonkeys.imageio + imageio + 3.7-SNAPSHOT + + imageio-tiff-jdk-interop + TwelveMonkeys :: ImageIO :: TIFF/JDK JPEG Interop + + Test TIFF plugin and JDK JPEG plugin interoperability + + + + + com.twelvemonkeys.imageio + imageio-core + + + com.twelvemonkeys.imageio + imageio-core + test-jar + test + + + com.twelvemonkeys.imageio + imageio-metadata + + + com.twelvemonkeys.imageio + imageio-tiff + + + diff --git a/imageio/imageio-tiff-jdk-interop/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/jdkinterop/TIFFImageReaderJDKJPEGInteroperabilityTest.java b/imageio/imageio-tiff-jdk-interop/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/jdkinterop/TIFFImageReaderJDKJPEGInteroperabilityTest.java new file mode 100644 index 00000000..cce05aa5 --- /dev/null +++ b/imageio/imageio-tiff-jdk-interop/src/test/java/com/twelvemonkeys/imageio/plugins/jpeg/jdkinterop/TIFFImageReaderJDKJPEGInteroperabilityTest.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2021, Harald Kuhr + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * * Neither the name of the copyright holder nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package com.twelvemonkeys.imageio.plugins.jpeg.jdkinterop; + +import com.twelvemonkeys.imageio.plugins.tiff.TIFFImageReader; +import com.twelvemonkeys.imageio.plugins.tiff.TIFFImageReaderSpi; +import com.twelvemonkeys.imageio.util.ImageReaderAbstractTest; + +import org.junit.Ignore; +import org.junit.Test; + +import javax.imageio.ImageIO; +import javax.imageio.ImageReader; +import javax.imageio.spi.ImageReaderSpi; +import java.awt.*; +import java.util.Arrays; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; + +import static org.junit.Assert.fail; + +/** + * Tests our TIFFImageReader delegating to the JDK JPEGImageReader. + * + * @author Harald Kuhr + * @author last modified by $Author: haraldk$ + * @version $Id: TIFFImageReaderJDKJPEGInteroperabilityTest.java,v 1.0 08.05.12 15:25 haraldk Exp$ + */ +public class TIFFImageReaderJDKJPEGInteroperabilityTest extends ImageReaderAbstractTest { + private static final String JDK_JPEG_PROVIDER_CLASS_NAME = "com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi"; + + @Override + protected ImageReaderSpi createProvider() { + return new TIFFImageReaderSpi(); + } + + @Override + protected List getTestData() { + return Arrays.asList( + new TestData(getClassLoaderResource("/tiff/foto_0001.tif"), new Dimension(1663, 2338)), // Little endian, Old JPEG + new TestData(getClassLoaderResource("/tiff/quad-jpeg.tif"), new Dimension(512, 384)), // YCbCr, JPEG compressed, striped + new TestData(getClassLoaderResource("/tiff/cmyk_jpeg.tif"), new Dimension(100, 100)) // CMYK, JPEG compressed, with ICC profile + ); + } + + @Override + protected List getFormatNames() { + return Collections.emptyList(); + } + + @Override + protected List getSuffixes() { + return Collections.emptyList(); + } + + @Override + protected List getMIMETypes() { + return Collections.emptyList(); + } + + @Ignore("Fails in TIFFImageReader") + @Override + public void testSetDestinationIllegal() { + } + + @Test + public void testReallyUsingJDKJPEGImageReader() { + Iterator readers = ImageIO.getImageReadersByFormatName("JPEG"); + + if (readers.hasNext()) { + ImageReader reader = readers.next(); + + if (JDK_JPEG_PROVIDER_CLASS_NAME.equals(reader.getOriginatingProvider().getClass().getName())) { + return; + } + } + + fail("Expected Spi not in use (dependency issue?): " + JDK_JPEG_PROVIDER_CLASS_NAME); + } +} diff --git a/imageio/imageio-tiff-jdk-interop/src/test/resources/tiff/cmyk_jpeg.tif b/imageio/imageio-tiff-jdk-interop/src/test/resources/tiff/cmyk_jpeg.tif new file mode 100644 index 00000000..85d0bc92 Binary files /dev/null and b/imageio/imageio-tiff-jdk-interop/src/test/resources/tiff/cmyk_jpeg.tif differ diff --git a/imageio/imageio-tiff-jdk-interop/src/test/resources/tiff/foto_0001.tif b/imageio/imageio-tiff-jdk-interop/src/test/resources/tiff/foto_0001.tif new file mode 100644 index 00000000..a8f80d87 Binary files /dev/null and b/imageio/imageio-tiff-jdk-interop/src/test/resources/tiff/foto_0001.tif differ diff --git a/imageio/imageio-tiff-jdk-interop/src/test/resources/tiff/quad-jpeg.tif b/imageio/imageio-tiff-jdk-interop/src/test/resources/tiff/quad-jpeg.tif new file mode 100755 index 00000000..e14f4c22 Binary files /dev/null and b/imageio/imageio-tiff-jdk-interop/src/test/resources/tiff/quad-jpeg.tif differ diff --git a/imageio/pom.xml b/imageio/pom.xml index 08c6de08..709e8c9e 100644 --- a/imageio/pom.xml +++ b/imageio/pom.xml @@ -52,6 +52,9 @@ imageio-reference + imageio-jpeg-jep262-interop + imageio-jpeg-jai-interop + imageio-tiff-jdk-interop @@ -143,6 +146,12 @@ ${project.version} + + ${project.groupId} + imageio-tiff + ${project.version} + + ${project.groupId} imageio-core