文档

Java™教程
隐藏目录
编写/保存图像
指南: 2D 图形
课程: 使用图像

编写/保存图像

这节课首先解释了如何使用javax.imageio包,将外部图像格式加载到Java 2D使用的内部BufferedImage格式中。然后它解释了如何使用Graphics.drawImage()来绘制该图像,并可选择进行过滤。

最后一步是将BufferedImage对象保存为外部图像格式。这可以是最初由Image I/O类从外部图像格式加载并使用Java 2D API进行修改的图像,也可以是由Java 2D创建的图像。

Image I/O类提供了一种简单的方式来保存各种图像格式的图像,如下面的示例所示:

static boolean ImageIO.write(RenderedImage im, 
                             String formatName,
                             File output)  throws IOException

注意: BufferedImage类实现了RenderedImage接口。

formatName参数选择要保存BufferedImage的图像格式。

try {
    // retrieve image
    BufferedImage bi = getMyImage();
    File outputfile = new File("saved.png");
    ImageIO.write(bi, "png", outputfile);
} catch (IOException e) {
    ...
}

ImageIO.write方法调用了实现PNG写入的代码,即“PNG写入插件”。之所以称之为插件,是因为Image I/O是可扩展的,并且可以支持各种格式。

但是以下标准图像格式插件:JPEG、PNG、GIF、BMP和WBMP始终存在。

每种图像格式都有其优点和缺点:

格式 优点 缺点
GIF 支持动画和透明像素 只支持256种颜色,没有半透明效果
PNG 比GIF或JPG更好的选择,适用于高彩色无损图像,支持半透明效果 不支持动画
JPG 非常适合照片图像 压缩损失,不适合文本、屏幕截图或任何需要完全保留原始图像的应用程序

对于大多数应用程序,使用这些标准插件已足够。它们的优点是可以随时使用。 Image I/O类提供了一种插入支持其他格式的方式,并且存在许多这样的插件。如果您想了解系统中可加载或保存的文件格式,可以使用ImageIO类的getReaderFormatNamesgetWriterFormatNames方法。这些方法返回一个字符串数组,列出此JRE中支持的所有格式。

String writerNames[] = ImageIO.getWriterFormatNames();

返回的名称数组将包括安装的任何额外插件,并且可以使用这些名称之一作为格式名称来选择图像编写器。以下代码示例是一个简化版本的完整图像编辑/修饰程序,使用了修订版的ImageDrawingApplet.java示例程序,可按以下方式使用:

这个示例的完整代码在SaveImage.java中表示。

在本课程中,您只学习了Image I/O的基础知识,它提供了广泛的图像编写支持,包括直接使用ImageWriter插件来实现对编码过程的更精细控制。ImageIO可以写入多个图像、图像元数据,并确定质量与大小之间的权衡。有关更多信息,请参阅Java Image I/O API指南


上一页: 创建和绘制图像
下一页: 打印