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 2014/03/13 08:20:02 UTC

svn commit: r1577045 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java

Author: tilman
Date: Thu Mar 13 07:20:01 2014
New Revision: 1577045

URL: http://svn.apache.org/r1577045
Log:
PDFBOX-1977: Improved method on how to choose the ImageWriter

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java?rev=1577045&r1=1577044&r2=1577045&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/util/ImageIOUtil.java Thu Mar 13 07:20:01 2014
@@ -119,24 +119,32 @@ public class ImageIOUtil
             Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName(formatName);
             ImageWriteParam param = null;
             IIOMetadata metadata = null;
+            // Loop until we get the best driver, i.e. one that supports
+            // setting dpi in the standard metadata format; however we'd also 
+            // accept a driver that can't if a better one can't be found
             while (writers.hasNext())
             {
+                if (writer != null)
+                {
+                    writer.dispose();
+                }
                 writer = writers.next();
                 param = writer.getDefaultWriteParam();
                 metadata = writer.getDefaultImageMetadata(new ImageTypeSpecifier(image), param);
-                if (metadata.isReadOnly() || !metadata.isStandardMetadataFormatSupported())
+                if (metadata != null && 
+                        !metadata.isReadOnly() && 
+                        metadata.isStandardMetadataFormatSupported())
                 {
-                    writer = null;
+                    break;
                 }
             }
-
             if (writer == null)
             {
                 return false;
             }
 
             // compression
-            if (param.canWriteCompressed())
+            if (param != null && param.canWriteCompressed())
             {
                 param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
                 if (formatName.toLowerCase().startsWith("tif"))
@@ -146,7 +154,6 @@ public class ImageIOUtil
                 }
                 else
                 {
-                    // JPEG, PNG compression
                     param.setCompressionType(param.getCompressionTypes()[0]);
                     param.setCompressionQuality(quality);
                 }
@@ -168,8 +175,13 @@ public class ImageIOUtil
             }
             else
             {
-                // metadata
-                setDPI(metadata, dpi, formatName);
+                // write metadata is possible
+                if (metadata != null && 
+                        !metadata.isReadOnly() && 
+                        metadata.isStandardMetadataFormatSupported())
+                {
+                    setDPI(metadata, dpi, formatName);
+                }
             }
 
             // write