From 46b48f32c39ee00d71e3e1c33118b8bce46c45b8 Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Fri, 3 Jun 2022 16:04:43 +0200 Subject: [PATCH] #683: Fix TIFF stripByteCounts computation for uncompressed data (cherry picked from commit 84a8ceeb9356b8bc75f32a1fc894a4833df3573f) --- .../imageio/plugins/tiff/TIFFImageWriter.java | 17 ++- .../plugins/tiff/TIFFImageWriterTest.java | 107 +++++++++++------- 2 files changed, 80 insertions(+), 44 deletions(-) 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 929e7ce5..daefb7e5 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 @@ -54,11 +54,18 @@ import javax.imageio.spi.ImageWriterSpi; import javax.imageio.stream.ImageInputStream; import javax.imageio.stream.ImageOutputStream; import java.awt.*; -import java.awt.color.ColorSpace; -import java.awt.color.ICC_ColorSpace; +import java.awt.color.*; import java.awt.image.*; -import java.io.*; -import java.util.*; +import java.io.DataOutput; +import java.io.DataOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Arrays; +import java.util.Collections; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; import java.util.zip.Deflater; import java.util.zip.DeflaterOutputStream; @@ -203,7 +210,7 @@ public final class TIFFImageWriter extends ImageWriterBase { long ifdSize = tiffWriter.computeIFDSize(entries.values()); long stripOffset = streamPosition + tiffWriter.offsetSize() + ifdSize + tiffWriter.offsetSize(); - long stripByteCount = ((long) renderedImage.getWidth() * renderedImage.getHeight() * pixelSize + 7L) / 8L; + long stripByteCount = renderedImage.getHeight() * (((long) renderedImage.getWidth() * pixelSize + 7L) / 8L); entries.put(TIFF.TAG_STRIP_OFFSETS, new TIFFEntry(TIFF.TAG_STRIP_OFFSETS, offsetType, stripOffset)); entries.put(TIFF.TAG_STRIP_BYTE_COUNTS, new TIFFEntry(TIFF.TAG_STRIP_BYTE_COUNTS, offsetType, stripByteCount)); 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 0d7da672..c16db257 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 @@ -30,26 +30,19 @@ package com.twelvemonkeys.imageio.plugins.tiff; -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; -import static org.junit.Assert.*; -import static org.junit.Assume.assumeNotNull; -import static org.mockito.Mockito.*; +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.TIFFReader; +import com.twelvemonkeys.imageio.stream.ByteArrayImageInputStream; +import com.twelvemonkeys.imageio.util.ImageTypeSpecifiers; +import com.twelvemonkeys.imageio.util.ImageWriterAbstractTest; +import com.twelvemonkeys.io.FastByteArrayOutputStream; +import com.twelvemonkeys.io.NullOutputStream; -import java.awt.*; -import java.awt.color.ColorSpace; -import java.awt.image.*; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; -import java.io.OutputStream; -import java.net.URL; -import java.nio.ByteOrder; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import org.junit.Test; +import org.w3c.dom.NodeList; import javax.imageio.IIOImage; import javax.imageio.ImageIO; @@ -67,19 +60,26 @@ import javax.imageio.stream.FileImageOutputStream; import javax.imageio.stream.ImageInputStream; import javax.imageio.stream.ImageOutputStream; import javax.imageio.stream.ImageOutputStreamImpl; +import java.awt.*; +import java.awt.color.*; +import java.awt.image.*; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.net.URL; +import java.nio.ByteOrder; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; -import org.junit.Test; -import org.w3c.dom.NodeList; - -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.TIFFReader; -import com.twelvemonkeys.imageio.stream.ByteArrayImageInputStream; -import com.twelvemonkeys.imageio.util.ImageWriterAbstractTest; -import com.twelvemonkeys.io.FastByteArrayOutputStream; -import com.twelvemonkeys.io.NullOutputStream; +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; +import static org.junit.Assert.*; +import static org.junit.Assume.assumeNotNull; +import static org.mockito.Mockito.*; /** * TIFFImageWriterTest @@ -163,6 +163,29 @@ public class TIFFImageWriterTest extends ImageWriterAbstractTest 22 bytes + } + } + @Test public void testWriteWithCustomSoftwareNative() throws IOException { String softwareString = "12M TIFF Test 1.0 (build $foo$)"; @@ -1340,33 +1363,39 @@ public class TIFFImageWriterTest extends ImageWriterAbstractTest