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