From c6e87116397ff604d1d03626fe8e002dcc349303 Mon Sep 17 00:00:00 2001 From: Schmidor Date: Wed, 13 Jan 2016 23:00:31 +0100 Subject: [PATCH] Remove runtime dependency to TIFF plugin from contrib module Also removed public flag from plugin classes again. Replaced by temporary clones. --- contrib/pom.xml | 6 + .../contrib/tiff/TIFFUtilities.java | 104 ++++++++++++++++-- .../contrib/tiff/TIFFUtilitiesTest.java | 2 +- .../imageio/plugins/tiff/TIFFBaseline.java | 2 +- .../imageio/plugins/tiff/TIFFExtension.java | 2 +- .../imageio/plugins/tiff/TIFFImageWriter.java | 4 +- 6 files changed, 105 insertions(+), 15 deletions(-) diff --git a/contrib/pom.xml b/contrib/pom.xml index 16a1aafd..9a73d3c6 100644 --- a/contrib/pom.xml +++ b/contrib/pom.xml @@ -43,10 +43,16 @@ test-jar test + + com.twelvemonkeys.imageio + imageio-metadata + ${project.version} + com.twelvemonkeys.imageio imageio-tiff ${project.version} + test com.twelvemonkeys.imageio diff --git a/contrib/src/main/java/com/twelvemonkeys/contrib/tiff/TIFFUtilities.java b/contrib/src/main/java/com/twelvemonkeys/contrib/tiff/TIFFUtilities.java index 2812ec88..16f2156e 100644 --- a/contrib/src/main/java/com/twelvemonkeys/contrib/tiff/TIFFUtilities.java +++ b/contrib/src/main/java/com/twelvemonkeys/contrib/tiff/TIFFUtilities.java @@ -29,28 +29,25 @@ package com.twelvemonkeys.contrib.tiff; import com.twelvemonkeys.imageio.metadata.AbstractDirectory; +import com.twelvemonkeys.imageio.metadata.AbstractEntry; import com.twelvemonkeys.imageio.metadata.CompoundDirectory; import com.twelvemonkeys.imageio.metadata.Directory; import com.twelvemonkeys.imageio.metadata.Entry; import com.twelvemonkeys.imageio.metadata.exif.EXIFReader; import com.twelvemonkeys.imageio.metadata.exif.EXIFWriter; +import com.twelvemonkeys.imageio.metadata.exif.Rational; import com.twelvemonkeys.imageio.metadata.exif.TIFF; -import com.twelvemonkeys.imageio.plugins.tiff.TIFFBaseline; -import com.twelvemonkeys.imageio.plugins.tiff.TIFFExtension; -import com.twelvemonkeys.imageio.plugins.tiff.TIFFImageWriter; -import com.twelvemonkeys.imageio.plugins.tiff.TIFFImageWriter.TIFFEntry; import com.twelvemonkeys.lang.Validate; import javax.imageio.ImageIO; import javax.imageio.stream.ImageInputStream; import javax.imageio.stream.ImageOutputStream; -import java.awt.*; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; -import java.awt.image.ColorModel; import java.io.File; import java.io.IOException; +import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Iterator; import java.util.List; @@ -66,8 +63,6 @@ public class TIFFUtilities { private TIFFUtilities() { } - ; - /** * Merges all pages from the input TIFF files into one TIFF file at the * output location. @@ -309,7 +304,7 @@ public class TIFFUtilities { } AffineTransform transform = AffineTransform.getTranslateInstance((newW - w) / 2.0, (newH - h) / 2.0); - transform.concatenate(orientationTransform); + transform.concatenate(orientationTransform); AffineTransformOp transformOp = new AffineTransformOp(transform, null); return transformOp.filter(input, null); } @@ -422,9 +417,98 @@ public class TIFFUtilities { break; } } - newIDFData.add(new TIFFImageWriter.TIFFEntry(TIFF.TAG_ORIENTATION, (short) orientation)); + newIDFData.add(new TIFFEntry(TIFF.TAG_ORIENTATION, (short) orientation)); IFD = new AbstractDirectory(newIDFData) { }; } } + + /** + * TODO: Temporary clone, to be removed after TMI204 has been closed + */ + public static final class TIFFEntry extends AbstractEntry { + // TODO: Expose a merge of this and the EXIFEntry class... + private final short type; + + private static short guessType(final Object val) { + // TODO: This code is duplicated in EXIFWriter.getType, needs refactor! + Object value = Validate.notNull(val); + + boolean array = value.getClass().isArray(); + if (array) { + value = Array.get(value, 0); + } + + // Note: This "narrowing" is to keep data consistent between read/write. + // TODO: Check for negative values and use signed types? + if (value instanceof Byte) { + return TIFF.TYPE_BYTE; + } + if (value instanceof Short) { + if (!array && (Short) value < Byte.MAX_VALUE) { + return TIFF.TYPE_BYTE; + } + + return TIFF.TYPE_SHORT; + } + if (value instanceof Integer) { + if (!array && (Integer) value < Short.MAX_VALUE) { + return TIFF.TYPE_SHORT; + } + + return TIFF.TYPE_LONG; + } + if (value instanceof Long) { + if (!array && (Long) value < Integer.MAX_VALUE) { + return TIFF.TYPE_LONG; + } + } + + if (value instanceof Rational) { + return TIFF.TYPE_RATIONAL; + } + + if (value instanceof String) { + return TIFF.TYPE_ASCII; + } + + // TODO: More types + + throw new UnsupportedOperationException(String.format("Method guessType not implemented for value of type %s", value.getClass())); + } + + public TIFFEntry(final int identifier, final Object value) { + this(identifier, guessType(value), value); + } + + TIFFEntry(int identifier, short type, Object value) { + super(identifier, value); + this.type = type; + } + + @Override + public String getTypeName() { + return TIFF.TYPE_NAMES[type]; + } + } + + /** + * TODO: Temporary clone, to be removed after TMI204 has been closed + */ + public interface TIFFExtension { + int ORIENTATION_TOPRIGHT = 2; + int ORIENTATION_BOTRIGHT = 3; + int ORIENTATION_BOTLEFT = 4; + int ORIENTATION_LEFTTOP = 5; + int ORIENTATION_RIGHTTOP = 6; + int ORIENTATION_RIGHTBOT = 7; + int ORIENTATION_LEFTBOT = 8; + } + + /** + * TODO: Temporary clone, to be removed after TMI204 has been closed + */ + public interface TIFFBaseline { + int ORIENTATION_TOPLEFT = 1; + } } diff --git a/contrib/src/test/java/com/twelvemonkeys/contrib/tiff/TIFFUtilitiesTest.java b/contrib/src/test/java/com/twelvemonkeys/contrib/tiff/TIFFUtilitiesTest.java index 1471000f..4c3b8732 100644 --- a/contrib/src/test/java/com/twelvemonkeys/contrib/tiff/TIFFUtilitiesTest.java +++ b/contrib/src/test/java/com/twelvemonkeys/contrib/tiff/TIFFUtilitiesTest.java @@ -28,7 +28,7 @@ package com.twelvemonkeys.contrib.tiff; -import com.twelvemonkeys.imageio.plugins.tiff.TIFFExtension; +import com.twelvemonkeys.contrib.tiff.TIFFUtilities.TIFFExtension; import com.twelvemonkeys.imageio.plugins.tiff.TIFFMedataFormat; import com.twelvemonkeys.io.FileUtil; import org.junit.Assert; diff --git a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFBaseline.java b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFBaseline.java index 3d62fd60..6d9a8cee 100644 --- a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFBaseline.java +++ b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFBaseline.java @@ -35,7 +35,7 @@ package com.twelvemonkeys.imageio.plugins.tiff; * @author last modified by $Author: haraldk$ * @version $Id: TIFFBaseline.java,v 1.0 08.05.12 16:43 haraldk Exp$ */ -public interface TIFFBaseline { +interface TIFFBaseline { int COMPRESSION_NONE = 1; int COMPRESSION_CCITT_MODIFIED_HUFFMAN_RLE = 2; int COMPRESSION_PACKBITS = 32773; diff --git a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFExtension.java b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFExtension.java index 76e1f7a0..f6444464 100644 --- a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFExtension.java +++ b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFExtension.java @@ -35,7 +35,7 @@ package com.twelvemonkeys.imageio.plugins.tiff; * @author last modified by $Author: haraldk$ * @version $Id: TIFFExtension.java,v 1.0 08.05.12 16:45 haraldk Exp$ */ -public interface TIFFExtension { +interface TIFFExtension { /** CCITT T.4/Group 3 Fax compression. */ int COMPRESSION_CCITT_T4 = 3; /** CCITT T.6/Group 4 Fax compression. */ 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 c06b8748..db5f9d5b 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 @@ -113,7 +113,7 @@ public final class TIFFImageWriter extends ImageWriterBase { // TODO: Allow appending/partly overwrite of existing file... } - public static final class TIFFEntry extends AbstractEntry { + static final class TIFFEntry extends AbstractEntry { // TODO: Expose a merge of this and the EXIFEntry class... private final short type; @@ -164,7 +164,7 @@ public final class TIFFImageWriter extends ImageWriterBase { throw new UnsupportedOperationException(String.format("Method guessType not implemented for value of type %s", value.getClass())); } - public TIFFEntry(final int identifier, final Object value) { + TIFFEntry(final int identifier, final Object value) { this(identifier, guessType(value), value); }