这些Java教程是为JDK 8编写的。本页中描述的示例和实践不利用后续版本引入的改进,可能使用不再可用的技术。
有关Java SE 9及以后版本中更新的语言功能的摘要,请参阅Java语言变更。
有关所有JDK版本的新功能、增强功能以及删除或弃用选项的信息,请参阅JDK发布说明。
当您想到数字图像时,您可能会想到用于数字摄影的JPEG图像格式或常用于网页的GIF图像格式。所有能够使用这些图像的程序都必须先将它们从外部格式转换为内部格式。
Java 2D支持使用其位于javax.imageio
包中的Image I/O API将这些外部图像格式加载到其BufferedImage
格式中。Image I/O内置支持GIF、PNG、JPEG、BMP和WBMP。Image I/O还可扩展,以便开发人员或管理员可以“插入”对其他格式的支持。例如,可以单独获取TIFF和JPEG 2000的插件。
要从特定文件加载图像,请使用以下代码,代码来自LoadImageApp.java
:
BufferedImage img = null; try { img = ImageIO.read(new File("strawberry.jpg")); } catch (IOException e) { }
Image I/O会将文件的内容识别为JPEG格式图像,并将其解码为可以被Java 2D直接使用的BufferedImage
。
LoadImageApp.java
显示了如何显示此图像。
如果代码在applet中运行,则从applet的代码库获取图像同样简单。以下摘录来自LoadImageApplet.java
:
try { URL url = new URL(getCodeBase(), "examples/strawberry.jpg"); img = ImageIO.read(url); } catch (IOException e) { }
在此示例中使用的getCodeBase
方法返回部署在Web服务器上时包含此applet的目录的URL。如果applet在本地部署,则getCodeBase
返回null,并且applet将无法运行。
以下示例显示了如何使用getCodeBase
方法加载strawberry.jpg
文件。
LoadImageApplet.java
包含此示例的完整代码,此applet需要strawberry.jpg
图像文件。
除了从文件或URL读取外,Image I/O还可以从其他源读取,例如InputStream。对于大多数应用程序来说,ImageIO.read()
是最直接的方便API,但javax.imageio.ImageIO
类提供了更多用于Image I/O API的高级用法的静态方法。此类上的方法集仅表示富集的API集的子集,用于发现关于图像的信息并控制图像解码(读取)过程。
我们将在写入/保存图像部分中进一步探讨Image I/O的其他功能。