Merged HEAD-BUG-FIX (5.0/Cloud) to HEAD (5.0/Cloud)

80363: Merged V4.2-BUG-FIX (4.2.4) to HEAD-BUG-FIX (5.0/Cloud)
      80325: Merged DEV to V4.2.N (4.2.4)
         80179 : MNT-10882 : Transparent PNG->JPG Transform Produces Ugly JPG Rendition
            - Removed transparency channel for jpeg target files


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@82741 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Will Abson
2014-09-03 15:30:34 +00:00
parent 08aca567c4
commit 3b7b9198fa

View File

@@ -21,6 +21,8 @@ package org.alfresco.repo.content.transform.magick;
import java.io.File; import java.io.File;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.content.MimetypeMap;
@@ -29,6 +31,7 @@ import org.alfresco.service.cmr.repository.CropSourceOptions;
import org.alfresco.service.cmr.repository.PagedSourceOptions; import org.alfresco.service.cmr.repository.PagedSourceOptions;
import org.alfresco.service.cmr.repository.TransformationOptions; import org.alfresco.service.cmr.repository.TransformationOptions;
import org.alfresco.util.TempFileProvider; import org.alfresco.util.TempFileProvider;
import org.alfresco.util.VersionNumber;
import org.alfresco.util.exec.RuntimeExec; import org.alfresco.util.exec.RuntimeExec;
import org.alfresco.util.exec.RuntimeExec.ExecutionResult; import org.alfresco.util.exec.RuntimeExec.ExecutionResult;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
@@ -165,6 +168,11 @@ public class ImageMagickContentTransformerWorker extends AbstractImageMagickCont
{ {
commandOptions = ""; commandOptions = "";
} }
// MNT-10882 : JPEG File Format, does not save the alpha (transparency) channel.
if (MimetypeMap.MIMETYPE_IMAGE_JPEG.equalsIgnoreCase(targetMimetype) && isAlphaOptionSupported())
{
commandOptions += " -alpha remove";
}
if (imageOptions.isAutoOrient()) if (imageOptions.isAutoOrient())
{ {
commandOptions = commandOptions + " -auto-orient"; commandOptions = commandOptions + " -auto-orient";
@@ -197,6 +205,47 @@ public class ImageMagickContentTransformerWorker extends AbstractImageMagickCont
} }
} }
protected String getImageMagickVersionNumber()
{
Pattern verisonNumPattern = Pattern.compile("Version: ImageMagick ((\\d|\\.)+)(-.*){0,1}");
try
{
Matcher versionNumMatcher = verisonNumPattern.matcher(this.versionString);
if (versionNumMatcher.find())
{
return versionNumMatcher.group(1);
}
}
catch (Throwable e)
{
logger.info("Could not determine version of ImageMagick: " + e.getMessage());
}
// version isn't extracted
return "";
}
/*
* MNT-10882 : Transparent PNG->JPG Transform Produces Ugly JPG Rendition
*/
protected boolean isAlphaOptionSupported()
{
// the "-alpha" option was only introduced in ImageMagick v6.7.5 and will fail in older versions.
String ALPHA_PROP_SUPPORTED_VERSION = "6.7.5";
try
{
VersionNumber supportedVersion = new VersionNumber(ALPHA_PROP_SUPPORTED_VERSION);
VersionNumber checkedVersion = new VersionNumber(getImageMagickVersionNumber());
return supportedVersion.compareTo(checkedVersion) > 0 ? false : true;
}
catch (Exception e)
{
logger.warn("Could not extract version of ImageMagick. Alpha-compatibility will be disabled: " + e.getMessage());
}
return false;
}
/** /**
* Gets the imagemagick command string for the image crop options provided * Gets the imagemagick command string for the image crop options provided
* *