import java.io.File; import java.io.FileInputStream; import java.io.IOException; import org.im4java.core.ConvertCmd; import org.im4java.core.IM4JavaException; import org.im4java.core.IMOperation; public class IMagickUtils { public static File IMCompress(String IMPath,File file){ if(file.length()<1024*516L){ // 比0.5M大的图片压缩处理,否则直接使用 return file; } int width = 800; int height = 600; try { SimpleImageInfo imageInfo = new SimpleImageInfo(new FileInputStream(file)); width = imageInfo.getWidth(); height = imageInfo.getHeight(); } catch (IOException e1) { System.out.println("获取图片宽高失败,Imagickutils.java"); } if(width>800){ // 按比例压缩图片大小,宽度最大为800 height = (int) (800.0*height/width); width = 800; } String size = width+"x"+height+"!"; String filePath = file.getAbsolutePath(); IMOperation operation = new IMOperation(); operation.addImage(filePath); operation.addRawArgs("-thumbnail", size); operation.addRawArgs("-quality", "80%"); operation.addRawArgs("-units", "pixelsperinch"); operation.addRawArgs("-density", "96"); operation.addRawArgs("-colorspace","RGB"); // 转成RGB系 避免CMYK模式下的imageIO水印异常 operation.addRawArgs("-strip"); operation.addImage(filePath); ConvertCmd cmd = new ConvertCmd(); cmd.setSearchPath(IMPath); //Windows需要设置,Linux不需要 try { cmd.run(operation); } catch (Exception e) { e.printStackTrace(); } return file; } public static void main(String[] args) throws IOException, InterruptedException, IM4JavaException { String impath = "D:\\Program Files\\ImageMagick-7.0.7-Q16"; File file = new File("C:\\Users\\lenovo\\Downloads\\33.jpg"); file = IMCompress(impath, file); } }