package com.jeecms.common.image; import java.awt.Color; import java.io.File; import java.io.IOException; import magick.Magick; import magick.MagickException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import com.jeecms.common.exception.GlobalException; import com.jeecms.common.exception.UploadExceptionInfo; import com.jeecms.common.exception.error.SysOtherErrorCodeEnum; /** * 图片缩小类 根据环境情况选择java图片缩小方式或专业的magick图片缩小方式 * * @author: tom * @date: 2018年12月25日 上午10:01:51 * @Copyright: 江西金磊科技发展有限公司 All rights reserved.Notice * 仅限于授权后使用,禁止非授权传阅以及私自用于商业目的。 */ @Service public class ImageScaleServiceImpl implements ImageScaleService { private static final Logger log = LoggerFactory.getLogger(ImageScaleServiceImpl.class); @Override public void resizeFix(File srcFile, File destFile, String srcFileName,int boxWidth, int boxHeight) throws Exception { if (isMagick) { MagickImageScale.resizeFix(srcFile, destFile, boxWidth, boxHeight); } else { AverageImageScale.resizeFix(srcFile, destFile,srcFileName, boxWidth, boxHeight); } } @Override public void resizeFix(File srcFile, File destFile, String srcFileName,int boxWidth, int boxHeight, int cutTop, int cutLeft, int cutWidth, int catHeight) throws Exception { if (isMagick) { MagickImageScale.resizeFix(srcFile, destFile, boxWidth, boxHeight, cutTop, cutLeft, cutWidth, catHeight); } else { AverageImageScale.resizeFix(srcFile, destFile,srcFileName, boxWidth, boxHeight, cutTop, cutLeft, cutWidth, catHeight); } } @Override public void imageMark(File srcFile, File destFile, String srcFileName,int minWidth, int minHeight, int pos, String text, Color color, int size, int alpha) throws Exception { if (isMagick) { MagickImageScale.imageMark(srcFile, destFile, minWidth, minHeight, pos, text, color, size, alpha); } else { AverageImageScale.imageMark(srcFile, destFile,srcFileName, minWidth, minHeight, pos, text, color, size, alpha); } } @Override public void imageMark(File srcFile, File destFile, String srcFileName,int minWidth, int minHeight, int pos, File markFile) throws Exception{ /** 水印文件不存在抛出异常 */ if (markFile == null || !markFile.exists()) { throw new GlobalException( new UploadExceptionInfo(SysOtherErrorCodeEnum.UPLOAD_MARK_FILE_ERROR.getDefaultMessage(), SysOtherErrorCodeEnum.UPLOAD_MARK_FILE_ERROR.getCode())); } if (isMagick) { MagickImageScale.imageMark(srcFile, destFile, minWidth, minHeight, pos, markFile); } else { AverageImageScale.imageMark(srcFile, destFile, srcFileName,minWidth, minHeight, pos, markFile); } } /** * 检查是否安装magick */ public void init() { if (tryMagick) { try { System.setProperty("jmagick.systemclassloader", "no"); new Magick(); log.info("using jmagick"); isMagick = true; } catch (Throwable e) { log.warn("load jmagick fail, use java image scale. message:{}", e.getMessage()); isMagick = false; } } else { log.info("jmagick is disabled."); isMagick = false; } } private boolean isMagick = false; private boolean tryMagick = true; public void setTryMagick(boolean tryMagick) { this.tryMagick = tryMagick; } }