本文目录导读:

我帮你详细总结一下Java中ImageIO读写常见图片格式的方法。
基本用法
读取图片
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.InputStream;
import java.net.URL;
// 从文件读取
BufferedImage image = ImageIO.read(new File("image.jpg"));
// 从输入流读取
BufferedImage image = ImageIO.read(inputStream);
// 从URL读取
BufferedImage image = ImageIO.read(new URL("https://example.com/image.jpg"));
写入图片
// 写入为PNG
ImageIO.write(image, "png", new File("output.png"));
// 写入为JPEG
ImageIO.write(image, "jpg", new File("output.jpg"));
// 写入到输出流
ImageIO.write(image, "png", outputStream);
支持的格式
ImageIO默认支持的格式:
| 格式 | 读取 | 写入 | 说明 |
|---|---|---|---|
| PNG | ✓ | ✓ | 无损压缩,支持透明 |
| JPEG/JPG | ✓ | ✓ | 有损压缩,不支持透明 |
| BMP | ✓ | ✓ | 位图格式,文件较大 |
| WBMP | ✓ | ✓ | 无线应用位图 |
| GIF | ✓ | ✓ | 支持动画,只支持256色 |
| TIFF | 需插件 | 需插件 | 需添加JAI ImageIO |
检查支持的格式
// 查看支持的读取格式
String[] readerFormats = ImageIO.getReaderFormatNames();
System.out.println("支持的读取格式: " + Arrays.toString(readerFormats));
// 查看支持的写入格式
String[] writerFormats = ImageIO.getWriterFormatNames();
System.out.println("支持的写入格式: " + Arrays.toString(writerFormats));
完整示例代码
图片格式转换
public class ImageConverter {
public static void convertFormat(String inputPath, String outputPath, String format)
throws IOException {
File input = new File(inputPath);
BufferedImage image = ImageIO.read(input);
if (image == null) {
System.out.println("无法读取图片: " + inputPath);
return;
}
File output = new File(outputPath);
boolean success = ImageIO.write(image, format, output);
System.out.println(success ? "转换成功" : "转换失败");
}
// 使用示例
public static void main(String[] args) throws IOException {
convertFormat("input.png", "output.jpg", "jpg");
convertFormat("input.jpg", "output.png", "png");
}
}
批量处理图片
public class BatchImageProcessor {
public static void batchConvert(String sourceDir, String targetDir,
String targetFormat) throws IOException {
File dir = new File(sourceDir);
File[] files = dir.listFiles((d, name) ->
name.toLowerCase().endsWith(".jpg") ||
name.toLowerCase().endsWith(".png") ||
name.toLowerCase().endsWith(".bmp"));
if (files == null) return;
for (File file : files) {
// 读取图片
BufferedImage image = ImageIO.read(file);
if (image == null) continue;
// 生成输出文件名
String outputName = file.getName().replaceAll("\\.[^.]+$", "." + targetFormat);
File outputFile = new File(targetDir, outputName);
// 写入新格式
ImageIO.write(image, targetFormat, outputFile);
System.out.println("转换完成: " + file.getName() + " -> " + outputName);
}
}
}
带参数写入JPEG
import javax.imageio.*;
import javax.imageio.stream.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.Iterator;
public class JPEGWriterWithQuality {
public static void writeJPEG(BufferedImage image, File output, float quality)
throws IOException {
// 获取JPEG写入器
Iterator<ImageWriter> writers = ImageIO.getImageWritersByFormatName("jpg");
if (!writers.hasNext()) {
throw new IllegalStateException("没有JPEG写入器");
}
ImageWriter writer = writers.next();
ImageOutputStream ios = ImageIO.createImageOutputStream(output);
writer.setOutput(ios);
// 设置压缩参数
ImageWriteParam param = writer.getDefaultWriteParam();
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
param.setCompressionQuality(quality); // 0.0 - 1.0
// 写入图片
writer.write(null, new IIOImage(image, null, null), param);
// 清理资源
ios.close();
writer.dispose();
}
// 使用示例
public static void main(String[] args) throws IOException {
BufferedImage image = ImageIO.read(new File("input.png"));
writeJPEG(image, new File("high_quality.jpg"), 0.95f);
writeJPEG(image, new File("low_quality.jpg"), 0.2f);
}
}
注意事项
- 图片为空检查:
ImageIO.read()可能返回null,始终检查返回值 - 格式支持:默认只支持基本的图片格式,WebP、HEIC等需要额外库
- 质量设置:JPEG质量参数范围0.0-1.0,数值越大质量越好
- IO异常处理:文件读写可能抛出IOException
- 内存管理:大图片可能消耗大量内存,考虑使用缩略图或流式处理
扩展库推荐
如果需要支持更多格式:
<dependency>
<groupId>com.twelvemonkeys.imageio</groupId>
<artifactId>imageio-core</artifactId>
<version>3.9.4</version>
</dependency>
需要我详细介绍某个特定格式的处理或高级用法吗?
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播