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 2020/12/09 10:39:54 UTC
svn commit: r1884240 - in
/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering:
PDFRenderer.java PageDrawer.java PageDrawerParameters.java
Author: tilman
Date: Wed Dec 9 10:39:54 2020
New Revision: 1884240
URL: http://svn.apache.org/viewvc?rev=1884240&view=rev
Log:
PDFBOX-4928: add fine tuning for quality-optimized downscaling, as suggested by Christian Appl
Modified:
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawerParameters.java
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java?rev=1884240&r1=1884239&r2=1884240&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PDFRenderer.java Wed Dec 9 10:39:54 2020
@@ -67,6 +67,8 @@ public class PDFRenderer
private static boolean kcmsLogged = false;
+ private float imageDownscalingOptimizationThreshhold = 0.5f;
+
/**
* Creates a new PDFRenderer.
* @param document the document to render
@@ -171,6 +173,29 @@ public class PDFRenderer
}
/**
+ *
+ * @return get the image downscaling optimization threshhold. See
+ * {@link #getImageDownscalingOptimizationThreshhold()} for details.
+ */
+ public float getImageDownscalingOptimizationThreshhold()
+ {
+ return imageDownscalingOptimizationThreshhold;
+ }
+
+ /**
+ * Set the image downscaling optimization threshhold. This must be a value between 0 and 1. When
+ * rendering downscaled images and rendering hints are set to bicubic+quality and the scaling is
+ * smaller than the threshhold, a more quality-optimized but slower method will be used. The
+ * default is 0.5 which is a good compromise.
+ *
+ * @param imageDownscalingOptimizationThreshhold
+ */
+ public void setImageDownscalingOptimizationThreshhold(float imageDownscalingOptimizationThreshhold)
+ {
+ this.imageDownscalingOptimizationThreshhold = imageDownscalingOptimizationThreshhold;
+ }
+
+ /**
* Returns the given page as an RGB image at 72 DPI
* @param pageIndex the zero-based index of the page to be converted.
* @return the rendered page image
@@ -306,8 +331,9 @@ public class PDFRenderer
// the end-user may provide a custom PageDrawer
RenderingHints actualRenderingHints =
renderingHints == null ? createDefaultRenderingHints(g) : renderingHints;
- PageDrawerParameters parameters = new PageDrawerParameters(this, page, subsamplingAllowed,
- destination, actualRenderingHints);
+ PageDrawerParameters parameters =
+ new PageDrawerParameters(this, page, subsamplingAllowed, destination,
+ actualRenderingHints, imageDownscalingOptimizationThreshhold);
PageDrawer drawer = createPageDrawer(parameters);
drawer.drawPage(g, page.getCropBox());
@@ -416,8 +442,9 @@ public class PDFRenderer
// the end-user may provide a custom PageDrawer
RenderingHints actualRenderingHints =
renderingHints == null ? createDefaultRenderingHints(graphics) : renderingHints;
- PageDrawerParameters parameters = new PageDrawerParameters(this, page, subsamplingAllowed,
- destination, actualRenderingHints);
+ PageDrawerParameters parameters =
+ new PageDrawerParameters(this, page, subsamplingAllowed, destination,
+ actualRenderingHints, imageDownscalingOptimizationThreshhold);
PageDrawer drawer = createPageDrawer(parameters);
drawer.drawPage(graphics, cropBox);
}
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java?rev=1884240&r1=1884239&r2=1884240&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawer.java Wed Dec 9 10:39:54 2020
@@ -158,6 +158,7 @@ public class PageDrawer extends PDFGraph
private final RenderDestination destination;
private final RenderingHints renderingHints;
+ private final float imageDownscalingOptimizationThreshhold;
static final int JAVA_VERSION = PageDrawer.getJavaVersion();
@@ -179,6 +180,8 @@ public class PageDrawer extends PDFGraph
this.subsamplingAllowed = parameters.isSubsamplingAllowed();
this.destination = parameters.getDestination();
this.renderingHints = parameters.getRenderingHints();
+ this.imageDownscalingOptimizationThreshhold =
+ parameters.getImageDownscalingOptimizationThreshhold();
}
/**
@@ -1184,7 +1187,7 @@ public class PageDrawer extends PDFGraph
float scaleX = Math.abs(imageTransformMatrix.getScalingFactorX() * graphicsTransformMatrix.getScalingFactorX());
float scaleY = Math.abs(imageTransformMatrix.getScalingFactorY() * graphicsTransformMatrix.getScalingFactorY());
- if ((scaleX < 0.5 || scaleY < 0.5) &&
+ if ((scaleX < imageDownscalingOptimizationThreshhold || scaleY < imageDownscalingOptimizationThreshhold) &&
RenderingHints.VALUE_RENDER_QUALITY.equals(graphics.getRenderingHint(RenderingHints.KEY_RENDERING)) &&
RenderingHints.VALUE_INTERPOLATION_BICUBIC.equals(graphics.getRenderingHint(RenderingHints.KEY_INTERPOLATION)))
{
Modified: pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawerParameters.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawerParameters.java?rev=1884240&r1=1884239&r2=1884240&view=diff
==============================================================================
--- pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawerParameters.java (original)
+++ pdfbox/trunk/pdfbox/src/main/java/org/apache/pdfbox/rendering/PageDrawerParameters.java Wed Dec 9 10:39:54 2020
@@ -35,18 +35,21 @@ public final class PageDrawerParameters
private final boolean subsamplingAllowed;
private final RenderDestination destination;
private final RenderingHints renderingHints;
+ private final float imageDownscalingOptimizationThreshhold;
/**
* Package-private constructor.
*/
PageDrawerParameters(PDFRenderer renderer, PDPage page, boolean subsamplingAllowed,
- RenderDestination destination, RenderingHints renderingHints)
+ RenderDestination destination, RenderingHints renderingHints,
+ float imageDownscalingOptimizationThreshhold)
{
this.renderer = renderer;
this.page = page;
this.subsamplingAllowed = subsamplingAllowed;
this.destination = destination;
this.renderingHints = renderingHints;
+ this.imageDownscalingOptimizationThreshhold = imageDownscalingOptimizationThreshhold;
}
/**
@@ -88,4 +91,14 @@ public final class PageDrawerParameters
{
return renderingHints;
}
+
+ /**
+ *
+ * @return the imageDownscalingOptimizationThreshhold
+ */
+
+ public float getImageDownscalingOptimizationThreshhold()
+ {
+ return imageDownscalingOptimizationThreshhold;
+ }
}