java图片压缩不失真的方法
时间: 2023-12-07 11:38:07 浏览: 227
以下是Java中常用的图片压缩方法:
1. 使用Java自带的ImageIO类进行压缩,但是这种方法压缩后的图片可能会失真。
```java
File input = new File("input.jpg");
BufferedImage image = ImageIO.read(input);
File compressedImageFile = new File("output.jpg");
OutputStream os = new FileOutputStream(compressedImageFile);
Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg");
ImageWriter writer = writers.next();
ImageOutputStream ios = ImageIO.createImageOutputStream(os);
writer.setOutput(ios);
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(0.5f); // 压缩质量
writer.write(null, new IIOImage(image, null, null), param);
os.close();
ios.close();
writer.dispose();
```
2. 使用第三方库Thumbnailator进行压缩,这种方法压缩后的图片也可能会失真。
```java
Thumbnails.of(new File("input.jpg"))
.scale(0.5f) // 压缩比例
.toFile(new File("output.jpg"));
```
3. 使用第三方库imgscalr进行压缩,这种方法压缩后的图片不会失真。
```java
BufferedImage image = ImageIO.read(new File("input.jpg"));
BufferedImage scaledImage = Scalr.resize(image, 500); // 压缩到指定大小
ImageIO.write(scaledImage, "jpg", new File("output.jpg"));
```
阅读全文