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.