You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ja...@apache.org on 2014/02/20 22:02:37 UTC
svn commit: r1570354 -
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
Author: jahewson
Date: Thu Feb 20 21:02:37 2014
New Revision: 1570354
URL: http://svn.apache.org/r1570354
Log:
Workaround for JAI JPEG bugs in PDFBOX-1893
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java?rev=1570354&r1=1570353&r2=1570354&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java Thu Feb 20 21:02:37 2014
@@ -67,9 +67,23 @@ public final class DCTFilter implements
"a suitable JAI I/O image filter is not installed");
}
- // I'd planned to use ImageReader#readRaster but it is buggy
- BufferedImage hack = ImageIO.read(input);
- Raster raster = hack.getRaster();
+ ImageInputStream iis = ImageIO.createImageInputStream(input);
+ reader.setInput(iis);
+
+ // get the raster using horrible JAI workarounds
+ Raster raster;
+ try
+ {
+ // I'd like to use ImageReader#readRaster but it is buggy and can't read RGB correctly
+ BufferedImage image = reader.read(0);
+ raster = image.getRaster();
+ }
+ catch (IIOException e)
+ {
+ // JAI can't read CMYK JPEGs using ImageReader#read or ImageIO.read but
+ // fortunately ImageReader#readRaster isn't buggy when reading 4-channel files
+ raster = reader.readRaster(0, null);
+ }
// special handling for 4-component images
if (raster.getNumBands() == 4)