From 72f780004e93fb5809d4c6e19baf23e09abdcb72 Mon Sep 17 00:00:00 2001 From: vivekkr0311 Date: Wed, 2 Sep 2026 16:57:32 +0530 Subject: [PATCH] Try run with GraphicsMagick --- engines/imagemagick/Dockerfile | 28 +++++++++---------- .../ImageMagickOptionsBuilder.java | 6 ++-- .../ImageMagickCommandExecutor.java | 7 +++-- .../main/resources/application-default.yaml | 6 ++-- .../imagemagick/ImageMagickTest.java | 2 +- 5 files changed, 26 insertions(+), 23 deletions(-) diff --git a/engines/imagemagick/Dockerfile b/engines/imagemagick/Dockerfile index 96ac91cf..e8cfe82f 100644 --- a/engines/imagemagick/Dockerfile +++ b/engines/imagemagick/Dockerfile @@ -1,16 +1,15 @@ -# Image provides a container in which to run ImageMagick transformations for Alfresco Content Services. - -# ImageMagick is from ImageMagick Studio LLC. See the license at http://www.imagemagick.org/script/license.php or in /ImageMagick-license.txt. +# Image provides a container in which to run GraphicsMagick transformations for Alfresco Content Services. +# +# PRODMAN-916 / ACS-12649 PoC: this engine has been switched from the custom (capability-reduced) +# ImageMagick build to the publicly available GraphicsMagick package from EPEL, installed with its +# full default capability set (delegates are NOT stripped, unlike the custom ImageMagick build). +# +# GraphicsMagick is from the GraphicsMagick Group. See http://www.graphicsmagick.org/ . # More infos about this image: https://github.com/Alfresco/alfresco-docker-base-java ARG JAVA_BASE_IMAGE=alfresco/alfresco-base-java:jre17-rockylinux9@sha256:f98833508b7be8c4b44a25450f9faac44cacfdc075f2295e02836b93fd05bb9c FROM ${JAVA_BASE_IMAGE} -# For other ImageMagick versions please look at https://github.com/Alfresco/imagemagick-build tags -ARG IMAGEMAGICK_VERSION=7.1.2-13-ci-1 - -ENV IMAGEMAGICK_RPM_URL=https://nexus.alfresco.com/nexus/service/local/repositories/thirdparty/org/imagemagick/imagemagick-distribution/${IMAGEMAGICK_VERSION}/imagemagick-distribution-${IMAGEMAGICK_VERSION} -ENV IMAGEMAGICK_DEP_RPM_URL=https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm ENV JAVA_OPTS="" # Set default user information @@ -21,14 +20,13 @@ ARG USERID=33002 COPY target/${env.project_artifactId}-${env.project_version}.jar /usr/bin +# Install GraphicsMagick from EPEL (public package, full capability - no reduced/stripped delegates). RUN ln /usr/bin/${env.project_artifactId}-${env.project_version}.jar /usr/bin/${env.project_artifactId}.jar && \ - yum install -y $IMAGEMAGICK_DEP_RPM_URL && \ - if [ "$(uname -m)" = "x86_64" ]; then \ - yum install -y ${IMAGEMAGICK_RPM_URL}-el9.rpm ${IMAGEMAGICK_RPM_URL}-libs-el9.rpm; \ - else \ - yum install -y ${IMAGEMAGICK_RPM_URL}-el9-aarch64.rpm ${IMAGEMAGICK_RPM_URL}-libs-el9-aarch64.rpm; \ - fi && \ - yum clean all + dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm && \ + dnf install -y dnf-plugins-core && \ + (dnf config-manager --set-enabled crb || true) && \ + dnf install -y GraphicsMagick && \ + dnf clean all && rm -rf /var/cache/dnf ADD target/generated-resources/licenses /licenses ADD target/generated-resources/licenses.xml /licenses/ diff --git a/engines/imagemagick/src/main/java/org/alfresco/transform/imagemagick/ImageMagickOptionsBuilder.java b/engines/imagemagick/src/main/java/org/alfresco/transform/imagemagick/ImageMagickOptionsBuilder.java index a9d88031..d4dbab3e 100644 --- a/engines/imagemagick/src/main/java/org/alfresco/transform/imagemagick/ImageMagickOptionsBuilder.java +++ b/engines/imagemagick/src/main/java/org/alfresco/transform/imagemagick/ImageMagickOptionsBuilder.java @@ -240,8 +240,10 @@ public final class ImageMagickOptionsBuilder StringJoiner args = new StringJoiner(" "); if (alphaRemove != null && alphaRemove) { - args.add("-alpha"); - args.add(("remove")); + // GraphicsMagick has no "-alpha remove"; the equivalent is compositing onto a white background. + args.add("-background"); + args.add("white"); + args.add("-flatten"); } if (autoOrient != null && autoOrient) { diff --git a/engines/imagemagick/src/main/java/org/alfresco/transform/imagemagick/transformers/ImageMagickCommandExecutor.java b/engines/imagemagick/src/main/java/org/alfresco/transform/imagemagick/transformers/ImageMagickCommandExecutor.java index 24b44b34..00723436 100644 --- a/engines/imagemagick/src/main/java/org/alfresco/transform/imagemagick/transformers/ImageMagickCommandExecutor.java +++ b/engines/imagemagick/src/main/java/org/alfresco/transform/imagemagick/transformers/ImageMagickCommandExecutor.java @@ -78,8 +78,10 @@ public class ImageMagickCommandExecutor extends AbstractCommandExecutor { RuntimeExec runtimeExec = new RuntimeExec(); Map commandsAndArguments = new HashMap<>(); + // GraphicsMagick is a single dispatch binary invoked as "gm convert ...". + // "-quiet" is dropped: it is not a GraphicsMagick option (GM is quiet by default). commandsAndArguments.put(".*", - new String[]{exe, "${source}", "SPLIT:${options}", "-strip", "-quiet", "${target}"}); + new String[]{exe, "convert", "${source}", "SPLIT:${options}", "-strip", "${target}"}); runtimeExec.setCommandsAndArguments(commandsAndArguments); Map processProperties = new HashMap<>(); @@ -113,7 +115,8 @@ public class ImageMagickCommandExecutor extends AbstractCommandExecutor { RuntimeExec runtimeExec = new RuntimeExec(); Map commandsAndArguments = new HashMap<>(); - commandsAndArguments.put(".*", new String[]{exe, "-version"}); + // GraphicsMagick reports its version via "gm version" (not "gm -version"). + commandsAndArguments.put(".*", new String[]{exe, "version"}); runtimeExec.setCommandsAndArguments(commandsAndArguments); return runtimeExec; } diff --git a/engines/imagemagick/src/main/resources/application-default.yaml b/engines/imagemagick/src/main/resources/application-default.yaml index 5cda77db..cb8a5d93 100644 --- a/engines/imagemagick/src/main/resources/application-default.yaml +++ b/engines/imagemagick/src/main/resources/application-default.yaml @@ -3,9 +3,9 @@ queue: transform: core: imagemagick: - root: ${IMAGEMAGICK_ROOT:/usr/lib64/ImageMagick-7.1.2} - dyn: ${IMAGEMAGICK_DYN:/usr/lib64/ImageMagick-7.1.2/lib} - exe: ${IMAGEMAGICK_EXE:/usr/bin/convert} + root: ${IMAGEMAGICK_ROOT:/usr} + dyn: ${IMAGEMAGICK_DYN:/usr/lib64} + exe: ${IMAGEMAGICK_EXE:/usr/bin/gm} coders: ${IMAGEMAGICK_CODERS:} config: ${IMAGEMAGICK_CONFIG:} commandOptions: diff --git a/engines/imagemagick/src/test/java/org/alfresco/transform/imagemagick/ImageMagickTest.java b/engines/imagemagick/src/test/java/org/alfresco/transform/imagemagick/ImageMagickTest.java index 7f5e4749..3faefeb7 100644 --- a/engines/imagemagick/src/test/java/org/alfresco/transform/imagemagick/ImageMagickTest.java +++ b/engines/imagemagick/src/test/java/org/alfresco/transform/imagemagick/ImageMagickTest.java @@ -240,7 +240,7 @@ public class ImageMagickTest extends AbstractBaseTest @Test public void optionsTest() throws Exception { - expectedOptions = "-alpha remove -gravity SouthEast -crop 123x456%+90+12 +repage -thumbnail 321x654%!"; + expectedOptions = "-background white -flatten -gravity SouthEast -crop 123x456%+90+12 +repage -thumbnail 321x654%!"; expectedSourceSuffix = "[2-3]"; mockMvc .perform(MockMvcRequestBuilders