javax.imageio 是 Java 标准库中用于图像 I/O(输入/输出)的核心包,提供了读取、写入、转换和处理图像的功能。它支持多种常见格式(如 JPEG、PNG、BMP、GIF 等),并通过插件式架构允许扩展更多格式。
1、入口类,提供静态方法用于图像读写和格式查询。
2、关键方法:
read(File/InputStream/URL):读取图像。
write(RenderedImage, String format, OutputStream/File):写入图像。
getReaderFormatNames() / getWriterFormatNames():获取支持的格式。
用于高级图像处理(如逐帧读取、元数据操作)。
内存中的图像数据表示,用于像素级操作。
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
public class ImageReadExample {
public static void main(String[] args) {
try {
// 读取图像文件
File file = new File("input.jpg");
BufferedImage image = ImageIO.read(file);
// 获取图像信息
int width = image.getWidth();
int height = image.getHeight();
int type = image.getType();
System.out.println("宽度: " + width);
System.out.println("高度: " + height);
System.out.println("类型: " + type);
} catch (Exception e) {
e.printStackTrace();
}
}
}import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class ImageConvertExample {
public static void main(String[] args) {
try {
// 读取 JPEG 图像
BufferedImage image = ImageIO.read(new File("input.jpg"));
// 转换为 PNG 格式保存
ImageIO.write(image, "png", new File("output.png"));
System.out.println("转换完成!");
} catch (IOException e) {
e.printStackTrace();
}
}
}import javax.imageio.ImageIO;
public class SupportedFormats {
public static void main(String[] args) {
// 获取支持的读取格式
String[] readers = ImageIO.getReaderFormatNames();
System.out.println("支持的读取格式:");
for (String format : readers) {
System.out.println(" - " + format);
}
// 获取支持的写入格式
String[] writers = ImageIO.getWriterFormatNames();
System.out.println("支持的写入格式:");
for (String format : writers) {
System.out.println(" - " + format);
}
}
}import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
public class ResizeImage {
public static void main(String[] args) {
try {
BufferedImage originalImage = ImageIO.read(new File("input.jpg"));
// 目标尺寸
int newWidth = 300;
int newHeight = 200;
// 创建缩放后的图像
BufferedImage resizedImage = new BufferedImage(
newWidth, newHeight, BufferedImage.TYPE_INT_RGB
);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, newWidth, newHeight, null);
g.dispose();
// 保存调整后的图像
ImageIO.write(resizedImage, "jpg", new File("resized.jpg"));
System.out.println("图像缩放完成!");
} catch (Exception e) {
e.printStackTrace();
}
}
}1、依赖格式支持
默认支持的格式因 JDK 版本而异(通常包括 JPEG、PNG、GIF、BMP)。
如需处理 TIFF 等格式,可引入第三方库(如 Apache Sanselan)。
2、 异常处理
ImageIO.read() 可能返回 null(当文件不是支持的图像格式时)。
3、性能优化
处理大图像时,使用 ImageReader 的 ImageReadParam 进行渐进式加载。
图像元数据:通过 ImageReader.getImageMetadata() 访问 EXIF 等信息。
逐帧处理:对 GIF 或视频帧使用 ImageReader.read() 的索引参数。
通过 javax.imageio,开发者可以轻松实现跨平台的图像处理功能,无需依赖外部库即可完成常见操作。