java ImageIO设置jpg图片质量
时间: 2023-07-04 12:06:20 浏览: 317
java image 图片处理
在 Java 中,可以使用 `javax.imageio.ImageIO` 类来读取和写入图像文件。如果要设置 JPG 图像的质量,可以通过以下步骤来实现:
1. 读取 JPG 图像文件:
```java
BufferedImage image = ImageIO.read(new File("image.jpg"));
```
2. 创建一个 `javax.imageio.ImageWriter` 对象,并设置输出参数:
```java
ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next();
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(0.8f); // 设置 JPG 图像的质量
```
在上面的代码中,我们使用了 `getImageWritersByFormatName` 方法来获取 JPG 格式的 `ImageWriter` 对象,并使用 `getDefaultWriteParam` 方法来获取默认的输出参数。然后,我们将压缩模式设置为 `MODE_EXPLICIT`,并使用 `setCompressionQuality` 方法设置 JPG 图像的质量,这里设置的是 0.8f。
3. 创建一个 `javax.imageio.IIOImage` 对象,并将图像数据和输出参数传递给它:
```java
IIOImage iioImage = new IIOImage(image, null, null);
iioImage.setMetadata(null);
```
在上面的代码中,我们使用 `IIOImage` 类来封装图像数据和输出参数。由于我们不需要元数据,所以将其设置为 `null`。
4. 将图像数据写入文件:
```java
File output = new File("output.jpg");
ImageOutputStream outputStream = ImageIO.createImageOutputStream(output);
writer.setOutput(outputStream);
writer.write(null, iioImage, param);
outputStream.close();
writer.dispose();
```
在上面的代码中,我们首先创建一个输出文件和一个 `ImageOutputStream` 对象,然后将其传递给 `ImageWriter` 对象。最后,我们调用 `write` 方法将图像数据写入文件,然后关闭输出流和 `ImageWriter` 对象。
完整代码示例:
```java
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import javax.imageio.ImageWriteParam;
import javax.imageio.ImageWriter;
import javax.imageio.metadata.IIOMetadata;
import javax.imageio.stream.ImageOutputStream;
import javax.imageio.IIOImage;
public class ImageQuality {
public static void main(String[] args) throws Exception {
BufferedImage image = ImageIO.read(new File("image.jpg"));
ImageWriter writer = ImageIO.getImageWritersByFormatName("jpg").next();
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(0.8f);
IIOImage iioImage = new IIOImage(image, null, null);
iioImage.setMetadata(null);
File output = new File("output.jpg");
ImageOutputStream outputStream = ImageIO.createImageOutputStream(output);
writer.setOutput(outputStream);
writer.write(null, iioImage, param);
outputStream.close();
writer.dispose();
}
}
```
阅读全文