From bf0038182ff43bc6b9ebaf76e6b4c7a790455a12 Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Fri, 28 Oct 2022 09:28:15 +0300 Subject: [PATCH] dspace-api: allow overriding ImageMagick density Allow users to override ImageMagick's default density of 72 DPI for creating PDF thumbnails. In this case a density of 144 will perform a "2x" supersample, which greatly increases the quality of the res- ulting images at the expense of slightly longer execution time and higher memory usage. See: https://imagemagick.org/script/command-line-options.php#density See: https://stackoverflow.com/questions/49828544/how-to-make-thumbnails-using-imagickresizeimage-appear-sharper-php Fixes: https://github.com/DSpace/DSpace/issues/8514 --- .../app/mediafilter/ImageMagickThumbnailFilter.java | 13 +++++++++++++ dspace/config/dspace.cfg | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/dspace-api/src/main/java/org/dspace/app/mediafilter/ImageMagickThumbnailFilter.java b/dspace-api/src/main/java/org/dspace/app/mediafilter/ImageMagickThumbnailFilter.java index a79fd42d59..862943a30c 100644 --- a/dspace-api/src/main/java/org/dspace/app/mediafilter/ImageMagickThumbnailFilter.java +++ b/dspace-api/src/main/java/org/dspace/app/mediafilter/ImageMagickThumbnailFilter.java @@ -119,6 +119,19 @@ public abstract class ImageMagickThumbnailFilter extends MediaFilter { f2.deleteOnExit(); ConvertCmd cmd = new ConvertCmd(); IMOperation op = new IMOperation(); + + // Optionally override ImageMagick's default density of 72 DPI to use a + // "supersample" when creating the PDF thumbnail. Note that I prefer to + // use the getProperty() method here instead of getIntPropert() because + // the latter always returns an integer (0 in the case it's not set). I + // would prefer to keep ImageMagick's default to itself rather than for + // us to set one. Also note that the density option *must* come before + // we open the input file. + String density = configurationService.getProperty(PRE + ".density"); + if (density != null) { + op.density(Integer.valueOf(density)); + } + String s = "[" + page + "]"; op.addImage(f.getAbsolutePath() + s); if (configurationService.getBooleanProperty(PRE + ".flatten", true)) { diff --git a/dspace/config/dspace.cfg b/dspace/config/dspace.cfg index 8e532310c1..6bebfc689c 100644 --- a/dspace/config/dspace.cfg +++ b/dspace/config/dspace.cfg @@ -547,6 +547,12 @@ filter.org.dspace.app.mediafilter.PDFBoxThumbnail.inputFormats = Adobe PDF # org.dspace.app.mediafilter.ImageMagickThumbnailFilter.cmyk_profile = /usr/share/ghostscript/9.18/iccprofiles/default_cmyk.icc # org.dspace.app.mediafilter.ImageMagickThumbnailFilter.srgb_profile = /usr/share/ghostscript/9.18/iccprofiles/default_rgb.icc +# Optional: override ImageMagick's default density of 72 when creating PDF thum- +# bnails. Greatly increases quality of resulting thumbnails, at the expense of +# slightly longer execution times and higher memory usage. Any integer over 72 +# will help, but recommend 144 for a "2x" supersample. +# org.dspace.app.mediafilter.ImageMagickThumbnailFilter.density = 144 + #### Crosswalk and Packager Plugin Settings #### # Crosswalks are used to translate external metadata formats into DSpace's internal format (DIM) # Packagers are used to ingest/export 'packages' (both content files and metadata)