|
@@ -0,0 +1,173 @@
|
|
|
+package com.ruoyi.app.util;
|
|
|
+
|
|
|
+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 ImageCompressUtil {
|
|
|
+ /**
|
|
|
+ * 根据设置的宽高等比例压缩图片文件<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;
|
|
|
+ //对于小400分辨率的图不压缩
|
|
|
+ if (w < 1000 && w > 400) {
|
|
|
+ w1 = (int) (w - w * 0.3);
|
|
|
+ h1 = (int) (h - h * 0.3);
|
|
|
+ }
|
|
|
+ if (w < 1600 && w > 1000) {
|
|
|
+ w1 = (int) (w - w * 0.45);
|
|
|
+ h1 = (int) (h - h * 0.45);
|
|
|
+ }
|
|
|
+ if (w < 2500 && w > 1600) {
|
|
|
+ w1 = (int) (w - w * 0.6);
|
|
|
+ h1 = (int) (h - h * 0.6);
|
|
|
+ }
|
|
|
+ if (w > 2500) {
|
|
|
+ w1 = (int) (w - w * 0.75);
|
|
|
+ h1 = (int) (h - h * 0.75);
|
|
|
+ }
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void main(String[] args) {
|
|
|
+ String asd = "D:/lineage/AppUploadPath/profile/upload/054142ce-ebc2-4af3-a867-7fdc32f17d25.JPG";
|
|
|
+ System.out.println(asd.replace("/profile", ""));
|
|
|
+ }
|
|
|
+}
|