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)