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 2021/05/07 18:34:49 UTC

svn commit: r1889641 - in /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox: filter/Filter.java pdmodel/graphics/image/JPEGFactory.java

Author: tilman
Date: Fri May  7 18:34:49 2021
New Revision: 1889641

URL: http://svn.apache.org/viewvc?rev=1889641&view=rev
Log:
PDFBOX-4892: DRY refactoring of image reader search as suggested by valerybokov; make method public but final; dispose unused reader

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java?rev=1889641&r1=1889640&r2=1889641&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/filter/Filter.java Fri May  7 18:34:49 2021
@@ -139,24 +139,25 @@ public abstract class Filter
     }
 
     /**
-     * Finds a suitable image reader for a format.
+     * Finds a suitable image raster reader for an image format.
      *
-     * @param formatName The format to search for.
+     * @param formatName The image format to search for.
      * @param errorCause The probably cause if something goes wrong.
      * @return The image reader for the format.
      * @throws MissingImageReaderException if no image reader is found.
      */
-    protected static ImageReader findImageReader(String formatName, String errorCause) throws MissingImageReaderException
+    public static final ImageReader findImageReader(String formatName, String errorCause)
+            throws MissingImageReaderException
     {
         Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName(formatName);
-        ImageReader reader;
         while (readers.hasNext())
         {
-            reader = readers.next();
-            if (reader != null && reader.canReadRaster())
+            ImageReader reader = readers.next();
+            if (reader.canReadRaster())
             {
                 return reader;
             }
+            reader.dispose();
         }
         throw new MissingImageReaderException("Cannot read " + formatName + " image: " + errorCause);
     }

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java?rev=1889641&r1=1889640&r2=1889641&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java Fri May  7 18:34:49 2021
@@ -48,7 +48,7 @@ import org.apache.commons.logging.LogFac
 import org.apache.pdfbox.cos.COSArray;
 import org.apache.pdfbox.cos.COSInteger;
 import org.apache.pdfbox.cos.COSName;
-import org.apache.pdfbox.filter.MissingImageReaderException;
+import org.apache.pdfbox.filter.Filter;
 import org.apache.pdfbox.io.IOUtils;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.graphics.color.PDColorSpace;
@@ -149,24 +149,8 @@ public final class JPEGFactory
 
     private static Dimensions retrieveDimensions(ByteArrayInputStream stream) throws IOException
     {
-        // find suitable image reader
-        Iterator<ImageReader> readers = ImageIO.getImageReadersByFormatName("JPEG");
-        ImageReader reader = null;
-        while (readers.hasNext())
-        {
-            reader = readers.next();
-            if (reader.canReadRaster())
-            {
-                break;
-            }
-        }
-
-        if (reader == null)
-        {
-            throw new MissingImageReaderException(
-                    "Cannot read JPEG image: a suitable JAI I/O image filter is not installed");
-        }
-
+        ImageReader reader =
+                Filter.findImageReader("JPEG", "a suitable JAI I/O image filter is not installed");
         try (ImageInputStream iis = ImageIO.createImageInputStream(stream))
         {
             reader.setInput(iis);