package org.sxkj.resource.util; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.springframework.mock.web.MockMultipartFile; import org.springframework.web.multipart.MultipartFile; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.*; import java.nio.channels.Channels; public class ImageCompressorUtil { /** * 压缩图片 * @param originalImage * @param scaleFactor * @return * @throws IOException */ public static MultipartFile compressImage(MultipartFile originalImage, Double scaleFactor) throws IOException { if (null==scaleFactor){ scaleFactor = 0.6; } // 读取原始图片 BufferedImage image = ImageIO.read(originalImage.getInputStream()); // 设置压缩图片名称 String originalFilename = "ys" + originalImage.getOriginalFilename(); // 获取原始文件的宽度和高度 int width = image.getWidth(); int height = image.getHeight(); // 计算压缩后的宽度和高度 int compressedWidth = (int) (scaleFactor * width); int compressedHeight = (int) (scaleFactor * height); // 创建压缩后的图片 BufferedImage compressedImage = new BufferedImage(compressedWidth, compressedHeight, BufferedImage.TYPE_INT_RGB); compressedImage.getGraphics().drawImage(image.getScaledInstance(compressedWidth, compressedHeight, BufferedImage.SCALE_SMOOTH), 0, 0, null); // 将压缩后的图片转换为MultipartFile ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ImageIO.write(compressedImage, getFileExtension(originalImage), outputStream); ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray()); // 写入本地-测试 // BufferedImage bufferedImage = ImageIO.read(inputStream); // ImageIO.write(bufferedImage, "jpg", new File("F:\\out.jpg")); // 转换 MockMultipartFile mockMultipartFile = new MockMultipartFile("__init__.py", originalFilename, "application/octet-stream", inputStream); // 关闭流 outputStream.close(); inputStream.close(); // 返回 return mockMultipartFile; } /** * 获取文件后缀名称 * @param file * @return */ public static String getFileExtension(MultipartFile file) { String fileName = file.getOriginalFilename(); if (fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0) { return fileName.substring(fileName.lastIndexOf(".") + 1); } else { return ""; } } /** * 获取文件后缀前缀 * @param file * @return */ public static String getFileName(MultipartFile file) { String fileName = file.getOriginalFilename(); if (fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0) { return fileName.substring(0,fileName.lastIndexOf(".")); } else { return ""; } } }