You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2024/08/21 13:44:30 UTC

svn commit: r1920117 - /pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java

Author: tilman
Date: Wed Aug 21 13:44:30 2024
New Revision: 1920117

URL: http://svn.apache.org/viewvc?rev=1920117&view=rev
Log:
PDFBOX-5660: split long method

Modified:
    pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java

Modified: pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java?rev=1920117&r1=1920116&r2=1920117&view=diff
==============================================================================
--- pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java (original)
+++ pdfbox/branches/3.0/pdfbox/src/main/java/org/apache/pdfbox/filter/DCTFilter.java Wed Aug 21 13:44:30 2024
@@ -76,41 +76,7 @@ final class DCTFilter extends Filter
             irp.setSourceRegion(options.getSourceRegion());
             options.setFilterSubsampled(true);
 
-            String numChannels = getNumChannels(reader);
-
-            // get the raster using horrible JAI workarounds
-            ImageIO.setUseCache(false);
-            Raster raster;
-
-            // Strategy: use read() for RGB or "can't get metadata"
-            // use readRaster() for CMYK and gray and as fallback if read() fails 
-            // after "can't get metadata" because "no meta" file was CMYK
-            if ("3".equals(numChannels) || numChannels.isEmpty())
-            {
-                try
-                {
-                    // I'd like to use ImageReader#readRaster but it is buggy and can't read RGB correctly
-                    BufferedImage image = reader.read(0, irp);
-                    if (image.getColorModel().getNumColorComponents() == 4)
-                    {
-                        throw new IIOException("CMYK image");
-                    }
-                    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
-                    LOG.debug("Couldn't read use read() for RGB image - using readRaster() as fallback", e);
-                    raster = reader.readRaster(0, irp);
-                }
-            }
-            else
-            {
-                // 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, irp);
-            }
+            Raster raster = readImageRaster(reader, irp);
 
             // special handling for 4-component images
             if (raster.getNumBands() == 4)
@@ -167,6 +133,44 @@ final class DCTFilter extends Filter
         return new DecodeResult(parameters);
     }
 
+    private Raster readImageRaster(ImageReader reader, ImageReadParam irp) throws IOException
+    {
+        String numChannels = getNumChannels(reader);
+        // get the raster using horrible JAI workarounds
+        ImageIO.setUseCache(false);
+        Raster raster;
+        // Strategy: use read() for RGB or "can't get metadata"
+        // use readRaster() for CMYK and gray and as fallback if read() fails
+        // after "can't get metadata" because "no meta" file was CMYK
+        if ("3".equals(numChannels) || numChannels.isEmpty())
+        {
+            try
+            {
+                // I'd like to use ImageReader#readRaster but it is buggy and can't read RGB correctly
+                BufferedImage image = reader.read(0, irp);
+                if (image.getColorModel().getNumColorComponents() == 4)
+                {
+                    throw new IIOException("CMYK image");
+                }
+                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
+                LOG.debug("Couldn't read use read() for RGB image - using readRaster() as fallback", e);
+                raster = reader.readRaster(0, irp);
+            }
+        }
+        else
+        {
+            // 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, irp);
+        }
+        return raster;
+    }
+
     @Override
     public DecodeResult decode(InputStream encoded, OutputStream decoded,
                                COSDictionary parameters, int index) throws IOException