From 8807ccd367a1fcae65c60d739f7a62c2688e0c94 Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Fri, 29 Jan 2016 11:54:15 +0100 Subject: [PATCH 1/7] #213 Add license to POM --- pom.xml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 050ccf28..e1976f57 100755 --- a/pom.xml +++ b/pom.xml @@ -12,13 +12,20 @@ pom Twelvemonkeys + + + The BSD License + https://github.com/haraldk/TwelveMonkeys#license + repo + + + common servlet imageio - contrib bom @@ -45,6 +52,11 @@ + + GitHub + https://github.com/haraldk/TwelveMonkeys/issues + + scm:git:https://github.com/haraldk/TwelveMonkeys scm:git:https://github.com/haraldk/TwelveMonkeys From 73f3290e22316b4119dad70c55942f271562b8d0 Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Fri, 29 Jan 2016 11:57:39 +0100 Subject: [PATCH 2/7] Re-adding contrib module --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index e1976f57..ea1fe9a7 100755 --- a/pom.xml +++ b/pom.xml @@ -26,6 +26,7 @@ imageio + contrib bom From 87db620dac0cb7351011ec99cce2ec67fb0413f1 Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Fri, 29 Jan 2016 15:42:08 +0100 Subject: [PATCH 3/7] Addded contributors. If you feel omitted, please send a pull request. --- pom.xml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pom.xml b/pom.xml index ea1fe9a7..638444fa 100755 --- a/pom.xml +++ b/pom.xml @@ -51,6 +51,20 @@ maven-guru + + Oliver Schmidtmer + mail@trek7891.de + + contributor + + + + Jason Palmer + jpalmer@itemmaster.com + + contributor + + From 156fe8bb258f3014a4c2c971205c4ef4b4c887ea Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Wed, 3 Feb 2016 10:46:04 +0100 Subject: [PATCH 4/7] Fixed some access scopes and made classes final. --- .../imageio/plugins/thumbsdb/ThumbsDBImageReader.java | 2 +- .../imageio/plugins/thumbsdb/ThumbsDBImageReaderSpi.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/imageio/imageio-thumbsdb/src/main/java/com/twelvemonkeys/imageio/plugins/thumbsdb/ThumbsDBImageReader.java b/imageio/imageio-thumbsdb/src/main/java/com/twelvemonkeys/imageio/plugins/thumbsdb/ThumbsDBImageReader.java index 13152c22..6d31b19f 100644 --- a/imageio/imageio-thumbsdb/src/main/java/com/twelvemonkeys/imageio/plugins/thumbsdb/ThumbsDBImageReader.java +++ b/imageio/imageio-thumbsdb/src/main/java/com/twelvemonkeys/imageio/plugins/thumbsdb/ThumbsDBImageReader.java @@ -62,7 +62,7 @@ import java.util.SortedSet; * @see com.twelvemonkeys.io.ole2.CompoundDocument * @see Harald Kuhr * @version $Id: ThumbsDBImageReaderSpi.java,v 1.0 28.feb.2006 19:21:05 haku Exp$ */ -public class ThumbsDBImageReaderSpi extends ImageReaderSpiBase { +public final class ThumbsDBImageReaderSpi extends ImageReaderSpiBase { private ImageReaderSpi jpegProvider; /** @@ -61,7 +61,7 @@ public class ThumbsDBImageReaderSpi extends ImageReaderSpiBase { return source instanceof ImageInputStream && canDecode((ImageInputStream) source); } - public boolean canDecode(final ImageInputStream pInput) throws IOException { + boolean canDecode(final ImageInputStream pInput) throws IOException { maybeInitJPEGProvider(); // If this is a OLE 2 CompoundDocument, we could try... // TODO: How do we know it's thumbs.db format (structure), without reading quite a lot? From 1449155987382160169bc055dba18a1a329869f0 Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Wed, 3 Feb 2016 11:19:12 +0100 Subject: [PATCH 5/7] Minor doc fix. --- .../main/java/com/twelvemonkeys/imageio/color/ColorSpaces.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/color/ColorSpaces.java b/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/color/ColorSpaces.java index c3203daf..1e5337fa 100644 --- a/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/color/ColorSpaces.java +++ b/imageio/imageio-core/src/main/java/com/twelvemonkeys/imageio/color/ColorSpaces.java @@ -100,7 +100,8 @@ public final class ColorSpaces { * * @param profile the ICC color profile. May not be {@code null}. * @return an ICC color space - * @throws IllegalArgumentException if {@code profile} is {@code null} + * @throws IllegalArgumentException if {@code profile} is {@code null}. + * @throws java.awt.color.CMMException if {@code profile} is invalid. */ public static ICC_ColorSpace createColorSpace(final ICC_Profile profile) { Validate.notNull(profile, "profile"); From eeeb22666cfb24b16815195e6d8a6607ed66336c Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Wed, 3 Feb 2016 15:35:33 +0100 Subject: [PATCH 6/7] #214 PSDImageReader: Read long layer names --- .../imageio/plugins/psd/PSD.java | 19 +++++ .../imageio/plugins/psd/PSDLayerInfo.java | 76 ++++++++++++++++-- .../imageio/plugins/psd/PSDMetadata.java | 2 +- .../plugins/psd/PSDImageReaderTest.java | 21 +++++ .../test/resources/psd/long-layer-names.psd | Bin 0 -> 22044 bytes 5 files changed, 110 insertions(+), 8 deletions(-) create mode 100644 imageio/imageio-psd/src/test/resources/psd/long-layer-names.psd diff --git a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSD.java b/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSD.java index 24e3554e..82f506de 100755 --- a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSD.java +++ b/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSD.java @@ -51,6 +51,7 @@ interface PSD { /** PSD Resource type identifier "8BIM" */ int RESOURCE_TYPE = ('8' << 24) + ('B' << 16) + ('I' << 8) + 'M'; + int RESOURCE_TYPE_LONG = ('8' << 24) + ('B' << 16) + ('6' << 8) + '4';; // Blending modes /** Pass through blending mode "pass"*/ @@ -689,4 +690,22 @@ interface PSD { /** Plug-In resource(s). Resources added by a plug-in. See the plug-in API found in the SDK documentation */ int RES_PLUGIN_MAX = 0x1387; + + // TODO: Better naming of these.. It's a kind of resource blocks as well.. + // "Additional Layer Information" + int LMsk = 'L' << 24 | 'M' << 16 | 's' << 8 | 'k'; + int Lr16 = 'L' << 24 | 'r' << 16 | '1' << 8 | '6'; + int Lr32 = 'L' << 24 | 'r' << 16 | '3' << 8 | '2'; + int Layr = 'L' << 24 | 'a' << 16 | 'y' << 8 | 'r'; + int Mt16 = 'M' << 24 | 't' << 16 | '1' << 8 | '6'; + int Mt32 = 'M' << 24 | 't' << 16 | '3' << 8 | '2'; + int Mtrn = 'M' << 24 | 't' << 16 | 'r' << 8 | 'n'; + int Alph = 'A' << 24 | 'l' << 16 | 'p' << 8 | 'h'; + int FMsk = 'F' << 24 | 'M' << 16 | 's' << 8 | 'k'; + int lnk2 = 'l' << 24 | 'n' << 16 | 'k' << 8 | '2'; + int FEid = 'F' << 24 | 'E' << 16 | 'i' << 8 | 'd'; + int FXid = 'F' << 24 | 'X' << 16 | 'i' << 8 | 'd'; + int PxSD = 'P' << 24 | 'x' << 16 | 'S' << 8 | 'D'; + int luni = 'l' << 24 | 'u' << 16 | 'n' << 8 | 'i'; + int lyid = 'l' << 24 | 'y' << 16 | 'i' << 8 | 'd'; } diff --git a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDLayerInfo.java b/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDLayerInfo.java index 237ad729..7b92883c 100755 --- a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDLayerInfo.java +++ b/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDLayerInfo.java @@ -50,7 +50,10 @@ final class PSDLayerInfo { final PSDLayerBlendMode blendMode; final PSDLayerMaskData layerMaskData; final PSDChannelSourceDestinationRange[] ranges; - final String layerName; + private final String layerName; + + private String unicodeLayerName; + private int layerId; PSDLayerInfo(final boolean largeFormat, final ImageInputStream pInput) throws IOException { top = pInput.readInt(); @@ -70,7 +73,7 @@ final class PSDLayerInfo { blendMode = new PSDLayerBlendMode(pInput); - // Length of layer mask data + // Length of layer extra data long extraDataSize = pInput.readUnsignedInt(); // Layer mask/adjustment layer data @@ -92,19 +95,78 @@ final class PSDLayerInfo { ranges[i] = new PSDChannelSourceDestinationRange(pInput, (i == 0 ? "Gray" : "Channel " + (i - 1))); } + // Layer name layerName = PSDUtil.readPascalString(pInput); - int layerNameSize = layerName.length() + 1; // Skip pad bytes for long word alignment if (layerNameSize % 4 != 0) { - int skip = layerNameSize % 4; + int skip = 4 - (layerNameSize % 4); pInput.skipBytes(skip); layerNameSize += skip; } - // TODO: Consider reading this: Adjustment layer info etc... - pInput.skipBytes(extraDataSize - layerMaskDataSize - 4 - layerBlendingDataSize - 4 - layerNameSize); + // Parse "Additional layer data" + long additionalLayerInfoStart = pInput.getStreamPosition(); + long expectedEnd = additionalLayerInfoStart + extraDataSize - layerMaskDataSize - 4 - layerBlendingDataSize - 4 - layerNameSize; + while (pInput.getStreamPosition() < expectedEnd) { + // 8BIM or 8B64 + int resourceSignature = pInput.readInt(); + + if (resourceSignature != PSD.RESOURCE_TYPE && resourceSignature != PSD.RESOURCE_TYPE_LONG) { + // Could be a corrupt document, or some new resource (type) we don't know about, + // we'll just leave it and carry on, as this is all secondary information for the reader. + break; + } + + int resourceKey = pInput.readInt(); + + // NOTE: Only SOME resources have long length fields... + boolean largeResource = resourceSignature != PSD.RESOURCE_TYPE; + long resourceLength = largeResource ? pInput.readLong() : pInput.readUnsignedInt(); + long resourceStart = pInput.getStreamPosition(); + +// System.out.printf("signature: %s 0x%08x\n", PSDUtil.intToStr(resourceSignature), resourceSignature); +// System.out.println("key: " + PSDUtil.intToStr(resourceKey)); +// System.out.println("length: " + resourceLength); + + switch (resourceKey) { + case PSD.luni: + unicodeLayerName = PSDUtil.readUnicodeString(pInput); + // There's usually a 0-pad here, but it is skipped in the general re-aligning code below + break; + + case PSD.lyid: + if (resourceLength != 4) { + throw new IIOException(String.format("Expected layerId length == 4: %d", resourceLength)); + } + layerId = pInput.readInt(); + break; + + default: + // TODO: Parse more data... + pInput.skipBytes(resourceLength); + break; + } + + // Re-align in case we got the length incorrect + if (pInput.getStreamPosition() != resourceStart + resourceLength) { + pInput.seek(resourceStart + resourceLength); + } + } + + // Re-align in case we got the length incorrect + if (pInput.getStreamPosition() != expectedEnd) { + pInput.seek(expectedEnd); + } + } + + String getLayerName() { + return unicodeLayerName != null ? unicodeLayerName : layerName; + } + + int getLayerId() { + return layerId; } @Override @@ -122,7 +184,7 @@ final class PSDLayerInfo { builder.append(", layer mask data: ").append(layerMaskData); } builder.append(", ranges: ").append(Arrays.toString(ranges)); - builder.append(", layer name: \"").append(layerName).append("\""); + builder.append(", layer name: \"").append(getLayerName()).append("\""); builder.append("]"); return builder.toString(); diff --git a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDMetadata.java b/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDMetadata.java index cb9c83f5..f59cb0b3 100755 --- a/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDMetadata.java +++ b/imageio/imageio-psd/src/main/java/com/twelvemonkeys/imageio/plugins/psd/PSDMetadata.java @@ -375,7 +375,7 @@ public final class PSDMetadata extends AbstractMetadata { for (PSDLayerInfo psdLayerInfo : layerInfo) { // TODO: Group in layer and use sub node for blend mode? node = new IIOMetadataNode("LayerInfo"); - node.setAttribute("name", psdLayerInfo.layerName); + node.setAttribute("name", psdLayerInfo.getLayerName()); node.setAttribute("top", String.valueOf(psdLayerInfo.top)); node.setAttribute("left", String.valueOf(psdLayerInfo.left)); node.setAttribute("bottom", String.valueOf(psdLayerInfo.bottom)); diff --git a/imageio/imageio-psd/src/test/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageReaderTest.java b/imageio/imageio-psd/src/test/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageReaderTest.java index cc3235f5..73ca0e32 100755 --- a/imageio/imageio-psd/src/test/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageReaderTest.java +++ b/imageio/imageio-psd/src/test/java/com/twelvemonkeys/imageio/plugins/psd/PSDImageReaderTest.java @@ -31,11 +31,16 @@ package com.twelvemonkeys.imageio.plugins.psd; import com.twelvemonkeys.imageio.util.ImageReaderAbstractTest; import com.twelvemonkeys.imageio.util.ProgressListenerBase; import org.junit.Test; +import org.w3c.dom.NodeList; +import javax.imageio.ImageIO; import javax.imageio.ImageReadParam; import javax.imageio.ImageReader; import javax.imageio.ImageTypeSpecifier; +import javax.imageio.metadata.IIOMetadata; +import javax.imageio.metadata.IIOMetadataNode; import javax.imageio.spi.ImageReaderSpi; +import javax.imageio.stream.ImageInputStream; import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException; @@ -385,4 +390,20 @@ public class PSDImageReaderTest extends ImageReaderAbstractTest } } } + + @Test + public void testReadUnicodeLayerName() throws IOException { + PSDImageReader imageReader = createReader(); + + try (ImageInputStream stream = ImageIO.createImageInputStream(getClassLoaderResource("/psd/long-layer-names.psd"))) { + imageReader.setInput(stream); + + IIOMetadata metadata = imageReader.getImageMetadata(0); + IIOMetadataNode root = (IIOMetadataNode) metadata.getAsTree(PSDMetadata.NATIVE_METADATA_FORMAT_NAME); + NodeList layerInfo = root.getElementsByTagName("LayerInfo"); + + assertEquals(1, layerInfo.getLength()); // Sanity + assertEquals("If_The_Layer_Name_Is_Really_Long_Oh_No_What_Do_I_Do", ((IIOMetadataNode) layerInfo.item(0)).getAttribute("name")); + } + } } \ No newline at end of file diff --git a/imageio/imageio-psd/src/test/resources/psd/long-layer-names.psd b/imageio/imageio-psd/src/test/resources/psd/long-layer-names.psd new file mode 100644 index 0000000000000000000000000000000000000000..452d61e6e2071c8b9938dcd8fda14f848eede21e GIT binary patch literal 22044 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 Date: Thu, 11 Feb 2016 16:49:50 +0100 Subject: [PATCH 7/7] #220 PlanarConfiguration now default to 1 (Chunky) according to the TIFF 6.0 spec. --- .../com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java index 47195b39..557ad840 100755 --- a/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java +++ b/imageio/imageio-tiff/src/main/java/com/twelvemonkeys/imageio/plugins/tiff/TIFFImageReader.java @@ -314,7 +314,7 @@ public class TIFFImageReader extends ImageReaderBase { readIFD(imageIndex); int sampleFormat = getSampleFormat(); - int planarConfiguration = getValueAsIntWithDefault(TIFF.TAG_PLANAR_CONFIGURATION, TIFFExtension.PLANARCONFIG_PLANAR); + int planarConfiguration = getValueAsIntWithDefault(TIFF.TAG_PLANAR_CONFIGURATION, TIFFBaseline.PLANARCONFIG_CHUNKY); int interpretation = getValueAsInt(TIFF.TAG_PHOTOMETRIC_INTERPRETATION, "PhotometricInterpretation"); int samplesPerPixel = getValueAsIntWithDefault(TIFF.TAG_SAMPLES_PER_PIXEL, 1); int bitsPerSample = getBitsPerSample();