You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by je...@apache.org on 2007/12/14 17:07:32 UTC
svn commit: r604214 -
/xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/image2/impl/imageio/ImageLoaderImageIO.java
Author: jeremias
Date: Fri Dec 14 08:07:30 2007
New Revision: 604214
URL: http://svn.apache.org/viewvc?rev=604214&view=rev
Log:
Added work-around for decoding CMYK JPEGs with ImageIO (no guarantees for color fidelity but it's better than not being able to use CMYK images).
Modified:
xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/image2/impl/imageio/ImageLoaderImageIO.java
Modified: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/image2/impl/imageio/ImageLoaderImageIO.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/image2/impl/imageio/ImageLoaderImageIO.java?rev=604214&r1=604213&r2=604214&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/image2/impl/imageio/ImageLoaderImageIO.java (original)
+++ xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/image2/impl/imageio/ImageLoaderImageIO.java Fri Dec 14 08:07:30 2007
@@ -23,6 +23,8 @@
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.IndexColorModel;
+import java.awt.image.Raster;
+import java.awt.image.RenderedImage;
import java.io.IOException;
import java.util.Iterator;
import java.util.Map;
@@ -82,7 +84,7 @@
/** {@inheritDoc} */
public Image loadImage(ImageInfo info, Map hints, ImageSessionContext session)
throws ImageException, IOException {
- BufferedImage imageData = null;
+ RenderedImage imageData = null;
IIOException firstException = null;
IIOMetadata iiometa = (IIOMetadata)info.getCustomObjects().get(
@@ -100,7 +102,11 @@
reader.setInput(imgStream, false, ignoreMetadata);
final int pageIndex = 0; //Always the first page at the moment
try {
- imageData = reader.read(pageIndex, param);
+ if (ImageFlavor.BUFFERED_IMAGE.equals(this.targetFlavor)) {
+ imageData = reader.read(pageIndex, param);
+ } else {
+ imageData = reader.readAsRenderedImage(pageIndex, param);
+ }
if (iiometa == null) {
iiometa = reader.getImageMetadata(pageIndex);
}
@@ -112,6 +118,15 @@
log.debug("non-first error loading image: " + iioe.getMessage());
}
}
+ try {
+ //Try fallback for CMYK images
+ BufferedImage bi = getFallbackBufferedImage(reader, pageIndex, param);
+ imageData = bi;
+ firstException = null; //Clear exception after successful fallback attempt
+ break;
+ } catch (IIOException iioe) {
+ //ignore
+ }
imgStream.reset();
}
} finally {
@@ -160,10 +175,44 @@
}
if (ImageFlavor.BUFFERED_IMAGE.equals(this.targetFlavor)) {
- return new ImageBuffered(info, imageData, transparentColor);
+ return new ImageBuffered(info, (BufferedImage)imageData, transparentColor);
} else {
return new ImageRendered(info, imageData, transparentColor);
}
+ }
+
+ private BufferedImage getFallbackBufferedImage(ImageReader reader,
+ int pageIndex, ImageReadParam param) throws IOException {
+ //Work-around found at: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4799903
+ //There are some additional ideas there if someone wants to go further.
+
+ // Try reading a Raster (no color conversion).
+ Raster raster = reader.readRaster(pageIndex, param);
+
+ // Arbitrarily select a BufferedImage type.
+ int imageType;
+ switch(raster.getNumBands()) {
+ case 1:
+ imageType = BufferedImage.TYPE_BYTE_GRAY;
+ break;
+ case 3:
+ imageType = BufferedImage.TYPE_3BYTE_BGR;
+ break;
+ case 4:
+ imageType = BufferedImage.TYPE_4BYTE_ABGR;
+ break;
+ default:
+ throw new UnsupportedOperationException();
+ }
+
+ // Create a BufferedImage.
+ BufferedImage bi = new BufferedImage(raster.getWidth(),
+ raster.getHeight(),
+ imageType);
+
+ // Set the image data.
+ bi.getRaster().setRect(raster);
+ return bi;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org