You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xmlgraphics.apache.org by ss...@apache.org on 2022/10/06 12:37:37 UTC
svn commit: r1904425 - in /xmlgraphics/commons/trunk/src: main/java/org/apache/xmlgraphics/image/loader/impl/ main/java/org/apache/xmlgraphics/image/loader/impl/imageio/ main/java/org/apache/xmlgraphics/image/loader/spi/ test/java/org/apache/xmlgraphic...
Author: ssteiner
Date: Thu Oct 6 12:37:37 2022
New Revision: 1904425
URL: http://svn.apache.org/viewvc?rev=1904425&view=rev
Log:
XGC-132: Fallback to raw png if ImageIO cannot read image
Modified:
xmlgraphics/commons/trunk/src/main/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderFactoryRaw.java
xmlgraphics/commons/trunk/src/main/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderRawPNG.java
xmlgraphics/commons/trunk/src/main/java/org/apache/xmlgraphics/image/loader/impl/imageio/PreloaderImageIO.java
xmlgraphics/commons/trunk/src/main/java/org/apache/xmlgraphics/image/loader/spi/ImageImplRegistry.java
xmlgraphics/commons/trunk/src/test/java/org/apache/xmlgraphics/image/loader/CorruptImagesTestCase.java
xmlgraphics/commons/trunk/src/test/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderRawPNGTestCase.java
Modified: xmlgraphics/commons/trunk/src/main/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderFactoryRaw.java
URL: http://svn.apache.org/viewvc/xmlgraphics/commons/trunk/src/main/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderFactoryRaw.java?rev=1904425&r1=1904424&r2=1904425&view=diff
==============================================================================
--- xmlgraphics/commons/trunk/src/main/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderFactoryRaw.java (original)
+++ xmlgraphics/commons/trunk/src/main/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderFactoryRaw.java Thu Oct 6 12:37:37 2022
@@ -19,8 +19,18 @@
package org.apache.xmlgraphics.image.loader.impl;
+import java.util.Map;
+
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.metadata.IIOMetadataNode;
+
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+
import org.apache.xmlgraphics.image.loader.ImageFlavor;
+import org.apache.xmlgraphics.image.loader.ImageInfo;
import org.apache.xmlgraphics.image.loader.spi.ImageLoader;
+import org.apache.xmlgraphics.image.loader.util.Penalty;
import org.apache.xmlgraphics.util.MimeConstants;
/**
@@ -93,4 +103,34 @@ public class ImageLoaderFactoryRaw exten
return true;
}
+ @Override
+ public boolean isSupported(ImageInfo imageInfo) {
+ if ("image/png".equals(imageInfo.getMimeType())) {
+ Map additionalPenalties = (Map) imageInfo.getCustomObjects().get("additionalPenalties");
+ int penalty = 0;
+ Penalty penaltyObj = ((Penalty)additionalPenalties.get(ImageLoaderRawPNG.class.getName()));
+ if (penaltyObj != null) {
+ penalty = penaltyObj.getValue();
+ }
+ IIOMetadata metadata = (IIOMetadata) imageInfo.getCustomObjects().get(IIOMetadata.class);
+ if (metadata != null) {
+ IIOMetadataNode children = (IIOMetadataNode)metadata.getAsTree("javax_imageio_png_1.0").getChildNodes();
+ NamedNodeMap attr = children.getElementsByTagName("IHDR").item(0).getAttributes();
+ String bitDepth = attr.getNamedItem("bitDepth").getNodeValue();
+ String interlaceMethod = attr.getNamedItem("interlaceMethod").getNodeValue();
+ String colorType = attr.getNamedItem("colorType").getNodeValue();
+ if (!bitDepth.equals("8") || !interlaceMethod.equals("none")
+ || ((colorType.equals("RGBAlpha") || colorType.equals("GrayAlpha")) && penalty >= 0)) {
+ return false;
+ }
+ children = (IIOMetadataNode)metadata.getAsTree("javax_imageio_1.0").getChildNodes();
+ Node numChannels = children.getElementsByTagName("NumChannels").item(0);
+ String numChannelsStr = numChannels.getAttributes().getNamedItem("value").getNodeValue();
+ if ("4".equals(numChannelsStr) && "Palette".equals(colorType) && penalty >= 0) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
}
Modified: xmlgraphics/commons/trunk/src/main/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderRawPNG.java
URL: http://svn.apache.org/viewvc/xmlgraphics/commons/trunk/src/main/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderRawPNG.java?rev=1904425&r1=1904424&r2=1904425&view=diff
==============================================================================
--- xmlgraphics/commons/trunk/src/main/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderRawPNG.java (original)
+++ xmlgraphics/commons/trunk/src/main/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderRawPNG.java Thu Oct 6 12:37:37 2022
@@ -74,13 +74,4 @@ public class ImageLoaderRawPNG extends A
ImageRawPNG irpng = im.getImageRawPNG(info);
return irpng;
}
-
- /** {@inheritDoc} */
- public int getUsagePenalty() {
- // since this image loader does not handle all kinds of PNG images then we add some penalty to it
- // so that it is not chosen by default; instead, users need to give it a negative penalty in
- // fop.xconf so that it is used
- return 1000;
- }
-
}
Modified: xmlgraphics/commons/trunk/src/main/java/org/apache/xmlgraphics/image/loader/impl/imageio/PreloaderImageIO.java
URL: http://svn.apache.org/viewvc/xmlgraphics/commons/trunk/src/main/java/org/apache/xmlgraphics/image/loader/impl/imageio/PreloaderImageIO.java?rev=1904425&r1=1904424&r2=1904425&view=diff
==============================================================================
--- xmlgraphics/commons/trunk/src/main/java/org/apache/xmlgraphics/image/loader/impl/imageio/PreloaderImageIO.java (original)
+++ xmlgraphics/commons/trunk/src/main/java/org/apache/xmlgraphics/image/loader/impl/imageio/PreloaderImageIO.java Thu Oct 6 12:37:37 2022
@@ -52,6 +52,7 @@ public class PreloaderImageIO extends Ab
return null;
}
ImageInputStream in = ImageUtil.needImageInputStream(src);
+ long startPos = in.getStreamPosition();
Iterator iter = ImageIO.getImageReaders(in);
if (!iter.hasNext()) {
return null;
@@ -85,15 +86,8 @@ public class PreloaderImageIO extends Ab
}
if (iiometa == null) {
- if (firstIOException == null) {
- throw new ImageException("Could not extract image metadata");
- } else {
- throw new ImageException("I/O error while extracting image metadata"
- + (firstIOException.getMessage() != null
- ? ": " + firstIOException.getMessage()
- : ""),
- firstIOException);
- }
+ in.seek(startPos);
+ return null;
}
//Resolution (first a default, then try to read the metadata)
Modified: xmlgraphics/commons/trunk/src/main/java/org/apache/xmlgraphics/image/loader/spi/ImageImplRegistry.java
URL: http://svn.apache.org/viewvc/xmlgraphics/commons/trunk/src/main/java/org/apache/xmlgraphics/image/loader/spi/ImageImplRegistry.java?rev=1904425&r1=1904424&r2=1904425&view=diff
==============================================================================
--- xmlgraphics/commons/trunk/src/main/java/org/apache/xmlgraphics/image/loader/spi/ImageImplRegistry.java (original)
+++ xmlgraphics/commons/trunk/src/main/java/org/apache/xmlgraphics/image/loader/spi/ImageImplRegistry.java Thu Oct 6 12:37:37 2022
@@ -322,6 +322,7 @@ public class ImageImplRegistry {
public ImageLoaderFactory[] getImageLoaderFactories(ImageInfo imageInfo, ImageFlavor flavor) {
String mime = imageInfo.getMimeType();
Collection matches = new java.util.TreeSet(new ImageLoaderFactoryComparator(flavor));
+ imageInfo.getCustomObjects().put("additionalPenalties", additionalPenalties);
Map flavorMap = (Map) loaders.get(mime);
if (flavorMap != null) {
for (Object i : flavorMap.entrySet()) {
Modified: xmlgraphics/commons/trunk/src/test/java/org/apache/xmlgraphics/image/loader/CorruptImagesTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/commons/trunk/src/test/java/org/apache/xmlgraphics/image/loader/CorruptImagesTestCase.java?rev=1904425&r1=1904424&r2=1904425&view=diff
==============================================================================
--- xmlgraphics/commons/trunk/src/test/java/org/apache/xmlgraphics/image/loader/CorruptImagesTestCase.java (original)
+++ xmlgraphics/commons/trunk/src/test/java/org/apache/xmlgraphics/image/loader/CorruptImagesTestCase.java Thu Oct 6 12:37:37 2022
@@ -21,8 +21,7 @@ package org.apache.xmlgraphics.image.loa
import org.junit.Test;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
+import static org.junit.Assert.assertEquals;
/**
* Tests for error behaviour with corrupt images.
@@ -38,13 +37,8 @@ public class CorruptImagesTestCase {
ImageSessionContext sessionContext = imageContext.newSessionContext();
ImageManager manager = imageContext.getImageManager();
- try {
- manager.preloadImage(uri, sessionContext);
- fail("Expected an ImageException!");
- } catch (Exception ie) {
- //Expected exception
- assertNotNull(ie.getMessage());
- }
+ ImageInfo imageInfo = manager.preloadImage(uri, sessionContext);
+ assertEquals(imageInfo.getMimeType(), "image/png");
}
}
Modified: xmlgraphics/commons/trunk/src/test/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderRawPNGTestCase.java
URL: http://svn.apache.org/viewvc/xmlgraphics/commons/trunk/src/test/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderRawPNGTestCase.java?rev=1904425&r1=1904424&r2=1904425&view=diff
==============================================================================
--- xmlgraphics/commons/trunk/src/test/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderRawPNGTestCase.java (original)
+++ xmlgraphics/commons/trunk/src/test/java/org/apache/xmlgraphics/image/loader/impl/ImageLoaderRawPNGTestCase.java Thu Oct 6 12:37:37 2022
@@ -48,7 +48,7 @@ public class ImageLoaderRawPNGTestCase {
@Test
public void testGetUsagePenalty() {
- assertEquals(1000, ilrpng.getUsagePenalty());
+ assertEquals(0, ilrpng.getUsagePenalty());
}
@Test
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: commits-help@xmlgraphics.apache.org