You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xmlgraphics.apache.org by ma...@apache.org on 2009/07/27 13:09:23 UTC
svn commit: r798100 -
/xmlgraphics/commons/trunk/src/java/org/apache/xmlgraphics/image/loader/impl/imageio/ImageLoaderImageIO.java
Author: maxberger
Date: Mon Jul 27 11:09:22 2009
New Revision: 798100
URL: http://svn.apache.org/viewvc?rev=798100&view=rev
Log:
Add tests for providers known not to apply the ICC Profile
Modified:
xmlgraphics/commons/trunk/src/java/org/apache/xmlgraphics/image/loader/impl/imageio/ImageLoaderImageIO.java
Modified: xmlgraphics/commons/trunk/src/java/org/apache/xmlgraphics/image/loader/impl/imageio/ImageLoaderImageIO.java
URL: http://svn.apache.org/viewvc/xmlgraphics/commons/trunk/src/java/org/apache/xmlgraphics/image/loader/impl/imageio/ImageLoaderImageIO.java?rev=798100&r1=798099&r2=798100&view=diff
==============================================================================
--- xmlgraphics/commons/trunk/src/java/org/apache/xmlgraphics/image/loader/impl/imageio/ImageLoaderImageIO.java (original)
+++ xmlgraphics/commons/trunk/src/java/org/apache/xmlgraphics/image/loader/impl/imageio/ImageLoaderImageIO.java Mon Jul 27 11:09:22 2009
@@ -28,8 +28,11 @@
import java.awt.image.RenderedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.util.HashSet;
import java.util.Iterator;
+import java.util.Locale;
import java.util.Map;
+import java.util.Set;
import java.util.StringTokenizer;
import java.util.zip.DataFormatException;
import java.util.zip.Inflater;
@@ -38,10 +41,10 @@
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.IIOMetadataFormatImpl;
import javax.imageio.metadata.IIOMetadataNode;
+import javax.imageio.spi.IIOServiceProvider;
import javax.imageio.stream.ImageInputStream;
import javax.xml.transform.Source;
@@ -72,6 +75,8 @@
private static final String JPEG_METADATA_NODE = "javax_imageio_jpeg_image_1.0";
+ private static final Set providersIgnoringICC = new HashSet();
+
/**
* Main constructor.
* @param targetFlavor the target flavor
@@ -98,6 +103,7 @@
IIOMetadata iiometa = (IIOMetadata)info.getCustomObjects().get(
ImageIOUtil.IMAGEIO_METADATA);
boolean ignoreMetadata = (iiometa != null);
+ boolean providerIgnoresICC = false;
Source src = session.needSource(info.getOriginalURI());
ImageInputStream imgStream = ImageUtil.needImageInputStream(src);
@@ -123,6 +129,8 @@
if (iiometa == null) {
iiometa = reader.getImageMetadata(pageIndex);
}
+ providerIgnoresICC = checkProviderIgnoresICC(reader
+ .getOriginatingProvider());
break; //Quit early, we have the image
} catch (IndexOutOfBoundsException indexe) {
throw new ImageException("Page does not exist. Invalid image index: "
@@ -197,7 +205,9 @@
}
}
}
- iccProf = tryToExctractICCProfile(iiometa);
+ if (providerIgnoresICC) {
+ iccProf = tryToExctractICCProfile(iiometa);
+ }
}
}
@@ -209,6 +219,27 @@
}
/**
+ * Checks if the provider ignores the ICC color profile. This method will
+ * assume providers work correctly, and return false if the provider is
+ * unknown. This ensures backward-compatibility.
+ *
+ * @param provider
+ * the ImageIO Provider
+ * @return true if we know the provider to be broken and ignore ICC
+ * profiles.
+ */
+ private boolean checkProviderIgnoresICC(IIOServiceProvider provider) {
+ // TODO: This information could be cached.
+ StringBuffer b = new StringBuffer(provider.getDescription(Locale.ENGLISH));
+ b.append('/').append(provider.getVendorName());
+ b.append('/').append(provider.getVersion());
+ if (log.isDebugEnabled()) {
+ log.debug("Image Provider: " + b.toString());
+ }
+ return ImageLoaderImageIO.providersIgnoringICC.contains(b.toString());
+ }
+
+ /**
* Extract ICC Profile from ImageIO Metadata. This method currently only
* supports PNG and JPEG metadata.
*
@@ -313,5 +344,18 @@
return bi;
}
-
+ static {
+ // TODO: This list could be kept in a resource file.
+ providersIgnoringICC
+ .add("Java Advanced Imaging Image I/O Tools natively-accelerated PNG Image Reader/"
+ + "Sun Microsystems, Inc./" + "1.1");
+ providersIgnoringICC
+ .add("Java Advanced Imaging Image I/O Tools natively-accelerated JPEG Image Reader/"
+ + "Sun Microsystems, Inc./" + "1.1");
+
+ providersIgnoringICC
+ .add("Standard PNG image reader/Sun Microsystems, Inc./1.0");
+ providersIgnoringICC
+ .add("Standard JPEG Image Reader/Sun Microsystems, Inc./0.5");
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: commits-help@xmlgraphics.apache.org