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 2016/11/11 17:05:01 UTC

svn commit: r1769317 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/JPEGFactory.java

Author: tilman
Date: Fri Nov 11 17:05:00 2016
New Revision: 1769317

URL: http://svn.apache.org/viewvc?rev=1769317&view=rev
Log:
PDFBOX-3566: avoid ClassCastException due to incompatible plugin

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

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=1769317&r1=1769316&r2=1769317&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 Nov 11 17:05:00 2016
@@ -227,6 +227,26 @@ public final class JPEGFactory
         return pdImage;
     }
 
+    private static ImageWriter getJPEGImageWriter() throws IOException
+    {
+        ImageWriter writer = null;
+        Iterator<ImageWriter> writers = ImageIO.getImageWritersBySuffix("jpeg");
+        while (writers.hasNext())
+        {
+            if (writer != null)
+            {
+                writer.dispose();
+            }
+            writer = writers.next();
+            // PDFBOX-3566: avoid CLibJPEGImageWriter, which is not a JPEGImageWriteParam
+            if (writer.getDefaultWriteParam() instanceof JPEGImageWriteParam)
+            {
+                return writer;
+            }
+        }
+        throw new IOException("No ImageWriter found for JPEG format");
+    }
+
     private static void encodeImageToJPEGStream(BufferedImage image, float quality, int dpi,
                                                 OutputStream out) throws IOException
     {
@@ -236,7 +256,7 @@ public final class JPEGFactory
         try
         {
             // find JAI writer
-            imageWriter = ImageIO.getImageWritersBySuffix("jpeg").next();
+            imageWriter = getJPEGImageWriter();
             ios = ImageIO.createImageOutputStream(out);
             imageWriter.setOutput(ios);