package com.dji.sample.territory.utils; import javax.imageio.ImageIO; import javax.imageio.ImageWriteParam; import javax.imageio.ImageWriter; import javax.imageio.stream.ImageOutputStream; import javax.imageio.stream.MemoryCacheImageOutputStream; import java.awt.image.BufferedImage; import java.io.*; import java.nio.file.Files; import java.nio.file.StandardCopyOption; public class ImgZipUtil { /** * 图片压缩 * * @param originalImageFile * @param compressionQuality 图片压缩质量 0-1 * @return * @throws IOException */ public static File compressImageAndGetFile(File originalImageFile, float compressionQuality) throws IOException { BufferedImage originalImage = ImageIO.read(originalImageFile); try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next(); try (ImageOutputStream ios = new MemoryCacheImageOutputStream(baos)) { writer.setOutput(ios); ImageWriteParam param = writer.getDefaultWriteParam(); param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT); param.setCompressionQuality(compressionQuality); writer.write(null, new javax.imageio.IIOImage(originalImage, null, null), param); } finally { writer.dispose(); } InputStream in = new ByteArrayInputStream(baos.toByteArray()); File tempFile = File.createTempFile("compressed-", ".jpg"); tempFile.deleteOnExit(); Files.copy(in, tempFile.toPath(), StandardCopyOption.REPLACE_EXISTING); return tempFile; } } }