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 2018/03/04 12:06:58 UTC

svn commit: r1825809 - /pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java

Author: tilman
Date: Sun Mar  4 12:06:58 2018
New Revision: 1825809

URL: http://svn.apache.org/viewvc?rev=1825809&view=rev
Log:
PDFBOX-3340: optimize repair process by decoding only if JPX filter, inspired by Itai Shaked

Modified:
    pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java

Modified: pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java?rev=1825809&r1=1825808&r2=1825809&view=diff
==============================================================================
--- pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java (original)
+++ pdfbox/branches/2.0/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/image/PDImageXObject.java Sun Mar  4 12:06:58 2018
@@ -39,6 +39,7 @@ import org.apache.pdfbox.cos.COSInputStr
 import org.apache.pdfbox.cos.COSName;
 import org.apache.pdfbox.cos.COSObject;
 import org.apache.pdfbox.cos.COSStream;
+import org.apache.pdfbox.filter.DecodeResult;
 import org.apache.pdfbox.io.IOUtils;
 import org.apache.pdfbox.pdmodel.PDDocument;
 import org.apache.pdfbox.pdmodel.PDResources;
@@ -123,15 +124,24 @@ public final class PDImageXObject extend
      */
     public PDImageXObject(PDStream stream, PDResources resources) throws IOException
     {
-        this(stream, resources, stream.createInputStream());
-    }
-    
-    // repairs parameters using decode result
-    private PDImageXObject(PDStream stream, PDResources resources, COSInputStream input)
-    {
-        super(repair(stream, input), COSName.IMAGE);
+        super(stream, COSName.IMAGE);
         this.resources = resources;
-        this.colorSpace = input.getDecodeResult().getJPXColorSpace();
+        List<COSName> filters = stream.getFilters();
+        if (filters != null && filters.size() > 0 && COSName.JPX_DECODE.equals(filters.get(filters.size()-1)))
+        {
+            COSInputStream is = null;
+            try
+            {
+                is = stream.createInputStream();
+                DecodeResult decodeResult = is.getDecodeResult();
+                stream.getCOSObject().addAll(decodeResult.getParameters());
+                this.colorSpace = decodeResult.getJPXColorSpace();
+            }
+            finally
+            {
+                IOUtils.closeQuietly(is);
+            }
+        }
     }
 
     /**
@@ -336,13 +346,6 @@ public final class PDImageXObject extend
         throw new IllegalArgumentException("Image type not supported: " + name);
     }
 
-    // repairs parameters using decode result
-    private static PDStream repair(PDStream stream, COSInputStream input)
-    {
-        stream.getCOSObject().addAll(input.getDecodeResult().getParameters());
-        return stream;
-    }
-
     /**
      * Returns the metadata associated with this XObject, or null if there is none.
      * @return the metadata associated with this object.