写/保存图像
本课程首先介绍如何使用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
Note: The BufferedImage
class implements the RenderedImage
interface.
。
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
类的getReaderFormatNames
和getWriterFormatNames
方法。这些方法返回一个字符串数组,列出了此 JRE 支持的所有格式。
String writerNames[] = ImageIO.getWriterFormatNames();
返回的名称数组将包括已安装的任何其他插件,这些名称中的任何一个都可以用作格式名称来选择图像编写器。以下代码示例是完整图像编辑/修饰程序的简单版本,它使用 ImageDrawingApplet.java
示例程序的修订版本,可以按如下方式使用:
- 首先通过 Image I / O 加载图像
- 用户从下拉列表中选择过滤器并绘制新的更新图像
- 用户从下拉列表中选择保存格式
- 接下来出现文件选择器,用户选择保存图像的位置
- 现在,其他桌面应用程序可以查看修改后的图像
该示例的完整代码在 SaveImage.java
中表示。
在本课程中,您只学习了Image I/O
的基础知识,它为编写图像提供了广泛的支持,包括直接使用ImageWriter
插件来实现对编码过程的更好控制。 ImageIO 可以写入多个图像,图像元数据,并确定质量与尺寸的权衡。有关更多信息,请参阅 Java Image I / O API 指南。