You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by tb...@apache.org on 2018/09/11 13:47:10 UTC

svn commit: r1840567 - /pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java

Author: tboehme
Date: Tue Sep 11 13:47:10 2018
New Revision: 1840567

URL: http://svn.apache.org/viewvc?rev=1840567&view=rev
Log:
PDFBOX-4309: added system property to enforce using alternate color space instead of ICC color space for performance reasons with LittleCMS used by Java 

Modified:
    pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java

Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java?rev=1840567&r1=1840566&r2=1840567&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/pdmodel/graphics/color/PDICCBased.java Tue Sep 11 13:47:10 2018
@@ -62,6 +62,10 @@ public final class PDICCBased extends PD
     private ICC_ColorSpace awtColorSpace;
     private PDColor initialColor;
     private boolean isRGB = false;
+    // allows to force using alternate color space instead of ICC color space for performance
+    // reasons with LittleCMS (LCMS), see PDFBOX-4309
+    // WARNING: do not activate this in a conforming reader
+    private boolean useOnlyAlternateColorSpace = false;
 
     /**
      * Creates a new ICC color space with an empty stream.
@@ -92,6 +96,8 @@ public final class PDICCBased extends PD
         {
             throw new IOException("ICCBased colorspace array must have a stream as second element");
         }
+        useOnlyAlternateColorSpace = System
+                .getProperty("org.apache.pdfbox.rendering.UseAlternateInsteadOfICCColorSpace") != null;
         array = iccArray;
         stream = new PDStream((COSStream) iccArray.getObject(1));
         loadICCProfile();
@@ -117,6 +123,18 @@ public final class PDICCBased extends PD
      */
     private void loadICCProfile() throws IOException
     {
+        if (useOnlyAlternateColorSpace)
+        {
+            try
+            {
+                fallbackToAlternateColorSpace(null);
+                return;
+            }
+            catch (IOException e)
+            {
+              LOG.warn("Error initializing alternate color space: " + e.getLocalizedMessage());
+            }
+        }
         try (InputStream input = this.stream.createInputStream())
         {
             // if the embedded profile is sRGB then we can use Java's built-in profile, which
@@ -172,8 +190,11 @@ public final class PDICCBased extends PD
         {
             isRGB = true;
         }
-        LOG.warn("Can't read embedded ICC profile (" + e.getLocalizedMessage() +
-                "), using alternate color space: " + alternateColorSpace.getName());
+        if (e != null)
+        {
+            LOG.warn("Can't read embedded ICC profile (" + e.getLocalizedMessage() +
+                     "), using alternate color space: " + alternateColorSpace.getName());
+        }
         initialColor = alternateColorSpace.getInitialColor();
     }