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;
|
}
|
}
|
}
|