diff --git a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageWriter.java b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageWriter.java index 41fc6e4a..8ee862cc 100644 --- a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageWriter.java +++ b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageWriter.java @@ -250,7 +250,7 @@ public final class TIFFImageWriter extends ImageWriterBase { ListenerDelegate listener = new ListenerDelegate(imageIndex); jpegWriter.addIIOWriteProgressListener(listener); jpegWriter.addIIOWriteWarningListener(listener); - jpegWriter.write(null, image, copyParams(param, jpegWriter)); + jpegWriter.write(null, imageOnly(image), copyParams(param, jpegWriter)); } finally { jpegWriter.dispose(); @@ -285,6 +285,17 @@ public final class TIFFImageWriter extends ImageWriterBase { return nextIFDPointerOffset; } + private IIOImage imageOnly(final IIOImage image) { + if (image.getMetadata() == null && image.getNumThumbnails() == 0) { + // Just image data here, no need to copy + return image; + } + + return image.hasRaster() + ? new IIOImage(image.getRaster(), null, null) + : new IIOImage(image.getRenderedImage(), null, null); + } + // TODO: Candidate util method private ImageWriteParam copyParams(final ImageWriteParam param, final ImageWriter writer) { if (param == null) { diff --git a/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageWriterTest.java b/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageWriterTest.java index a74a9e70..f4d1dd4c 100644 --- a/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageWriterTest.java +++ b/imageio/imageio-tiff/src/test/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageWriterTest.java @@ -34,6 +34,7 @@ import com.twelvemonkeys.imageio.metadata.Directory; import com.twelvemonkeys.imageio.metadata.Entry; import com.twelvemonkeys.imageio.metadata.tiff.Rational; import com.twelvemonkeys.imageio.metadata.tiff.TIFF; +import com.twelvemonkeys.imageio.metadata.tiff.TIFFEntry; import com.twelvemonkeys.imageio.metadata.tiff.TIFFReader; import com.twelvemonkeys.imageio.stream.ByteArrayImageInputStream; import com.twelvemonkeys.imageio.util.ImageTypeSpecifiers; @@ -73,6 +74,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import static com.twelvemonkeys.imageio.metadata.tiff.TIFF.TAG_X_RESOLUTION; +import static com.twelvemonkeys.imageio.metadata.tiff.TIFF.TAG_Y_RESOLUTION; import static com.twelvemonkeys.imageio.plugins.tiff.TIFFImageMetadataFormat.SUN_NATIVE_IMAGE_METADATA_FORMAT_NAME; import static com.twelvemonkeys.imageio.plugins.tiff.TIFFImageMetadataTest.createTIFFFieldNode; import static com.twelvemonkeys.imageio.util.ImageReaderAbstractTest.assertRGBEquals; @@ -133,8 +136,8 @@ public class TIFFImageWriterTest extends ImageWriterAbstractTest