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();
}