如何修改以下代码,实现图片压缩过程中,尽量是零损耗,并且图片占内存大小压缩至最小?
我在运行以下代码时候,压缩质量输入的越小,压缩的画质越差,所以想问问大家,该如何办?
public class CompressImageUntils {
public static void compressImage(String srcPath, String destPath, float quality) {
try {
// 读取图片
File input = new File(srcPath);
BufferedImage image = ImageIO.read(input);
// 获取JPEG压缩参数
Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg");
if (!writers.hasNext()) throw new IllegalStateException("No writers found");
ImageWriter writer = writers.next();
ImageWriteParam param = writer.getDefaultWriteParam();
// 如果这是JPEG图片,则设置压缩质量
if (param instanceof JPEGImageWriteParam) {
JPEGImageWriteParam jpegParam = (JPEGImageWriteParam) param;
jpegParam.setCompressionMode(JPEGImageWriteParam.MODE_EXPLICIT);
jpegParam.setCompressionQuality(quality); // 设置压缩质量,0.0-1.0
}
BeanUtils.copyProperties(1,1);
// 写入压缩后的图片
File output = new File(destPath);
try (ImageOutputStream ios = ImageIO.createImageOutputStream(output)) {
writer.setOutput(ios);
writer.write(null, new IIOImage(image, null, null), param);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}