这些 Java 教程是针对 JDK 8 编写的。本页面中描述的示例和实践未利用后续版本中引入的改进,并可能使用不再可用的技术。
请参阅Java 语言更改,了解 Java SE 9 及后续版本中的更新语言特性的摘要。
请参阅JDK 发布说明,了解有关所有 JDK 版本的新功能、增强功能和已移除或已弃用选项的信息。
这节课首先解释了如何使用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
类的getReaderFormatNames
和getWriterFormatNames
方法。这些方法返回一个字符串数组,列出此JRE中支持的所有格式。
String writerNames[] = ImageIO.getWriterFormatNames();
返回的名称数组将包括安装的任何额外插件,并且可以使用这些名称之一作为格式名称来选择图像编写器。以下代码示例是一个简化版本的完整图像编辑/修饰程序,使用了修订版的ImageDrawingApplet.java
示例程序,可按以下方式使用:
这个示例的完整代码在SaveImage.java
中表示。
在本课程中,您只学习了Image I/O
的基础知识,它提供了广泛的图像编写支持,包括直接使用ImageWriter
插件来实现对编码过程的更精细控制。ImageIO可以写入多个图像、图像元数据,并确定质量与大小之间的权衡。有关更多信息,请参阅Java Image I/O API指南。