package com.lsw.commons.utils; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import javax.imageio.ImageIO; public class ImageZipUtil { /** * 根据设置的宽高等比例压缩图片文件<br> * 先保存原文件,再压缩、上传 * * @param oldFile * 要进行压缩的文件 * @param newFile * 新文件 * @return 返回压缩后的文件的全路径 */ public static String zipImageFile(File oldFile, File newFile) { if (oldFile == null) { return null; } try { /** 对服务器上的临时文件进行处理 */ Image srcFile = ImageIO.read(oldFile); int w = srcFile.getWidth(null); int h = srcFile.getHeight(null); int w1=w; int h1=h; if(w<800&&w>200){ w1=(int) (w-w*0.3); h1=(int) (h-h*0.3); }else if (w<1600&&w>800) { w1=(int) (w-w*0.4); h1=(int) (h-h*0.4); }else if (w<2500&&w>1600) { w1=(int) (w-w*0.45); h1=(int) (h-h*0.45); }else if (w<4100&&w>2500) { w1=(int) (w-w*0.5); h1=(int) (h-h*0.5); } String srcImgPath = newFile.getAbsoluteFile().toString(); String subfix = "jpg"; subfix = srcImgPath.substring(srcImgPath.lastIndexOf(".") + 1, srcImgPath.length()); BufferedImage buffImg = null; if (subfix.equals("png")) { buffImg = new BufferedImage(w1, h1, BufferedImage.TYPE_INT_ARGB); } else { buffImg = new BufferedImage(w1, h1, BufferedImage.TYPE_INT_RGB); } Graphics2D graphics = buffImg.createGraphics(); graphics.setBackground(new Color(255, 255, 255)); graphics.setColor(new Color(255, 255, 255)); graphics.fillRect(0, 0, w1, h1); graphics.drawImage(srcFile.getScaledInstance(w1, h1, Image.SCALE_SMOOTH), 0, 0, null); ImageIO.write(buffImg, subfix, new File(srcImgPath)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return newFile.getAbsolutePath(); } /** * 根据设置的宽高等比例压缩图片文件<br> * 先保存原文件,再压缩、上传 * * @param oldFile * 要进行压缩的文件 * @param newFile * 新文件 * @return 返回压缩后的文件的全路径 */ public static String zipImageFile(File oldFile, File newFile,double display) { if (oldFile == null) { return null; } try { /** 对服务器上的临时文件进行处理 */ Image srcFile = ImageIO.read(oldFile); int w = srcFile.getWidth(null); int h = srcFile.getHeight(null); int w1=w; int h1=h; w1=(int) (w-w*display); h1=(int) (h-h*display); String srcImgPath = newFile.getAbsoluteFile().toString(); String subfix = "jpg"; subfix = srcImgPath.substring(srcImgPath.lastIndexOf(".") + 1, srcImgPath.length()); BufferedImage buffImg = null; if (subfix.equals("png")) { buffImg = new BufferedImage(w1, h1, BufferedImage.TYPE_INT_ARGB); } else { buffImg = new BufferedImage(w1, h1, BufferedImage.TYPE_INT_RGB); } Graphics2D graphics = buffImg.createGraphics(); graphics.setBackground(new Color(255, 255, 255)); graphics.setColor(new Color(255, 255, 255)); graphics.fillRect(0, 0, w1, h1); graphics.drawImage(srcFile.getScaledInstance(w1, h1, Image.SCALE_SMOOTH), 0, 0, null); ImageIO.write(buffImg, subfix, new File(srcImgPath)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return newFile.getAbsolutePath(); } /** * 按设置的宽度高度压缩图片文件<br> * 先保存原文件,再压缩、上传 * * @param oldFile * 要进行压缩的文件全路径 * @param newFile * 新文件 * @param width * 宽度 * @param height * 高度 * @param quality * 质量 * @return 返回压缩后的文件的全路径 */ public static String zipWidthHeightImageFile(File oldFile, File newFile, int width, int height, float quality) { if (oldFile == null) { return null; } String newImage = null; try { /** 对服务器上的临时文件进行处理 */ Image srcFile = ImageIO.read(oldFile); String srcImgPath = newFile.getAbsoluteFile().toString(); System.out.println(srcImgPath); String subfix = "jpg"; subfix = srcImgPath.substring(srcImgPath.lastIndexOf(".") + 1, srcImgPath.length()); BufferedImage buffImg = null; if (subfix.equals("png")) { buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB); } else { buffImg = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); } Graphics2D graphics = buffImg.createGraphics(); graphics.setBackground(new Color(255, 255, 255)); graphics.setColor(new Color(255, 255, 255)); graphics.fillRect(0, 0, width, height); graphics.drawImage(srcFile.getScaledInstance(width, height, Image.SCALE_SMOOTH), 0, 0, null); ImageIO.write(buffImg, subfix, new File(srcImgPath)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return newImage; } }