第三章 编写 Image I/O 应用
3.1 读写图片
javax.imageio.ImageIO
类提供了一系列方便的执行最简图像I/O操作的静态方法。
从标准的格式(GIF、PNG或JPEG)中读取图片的示例如下:
File f = new File("c:\images\myimage.gif");
BufferedImage bi = ImageIO.read(f);
图片的格式将会由API基于文件内容自动识别出来。大部分图片文件在它们的前几个字节都包含有一种“魔数(Magic Number)”,它可以用来分辨文件的格式。对于没有魔数的图像格式,自动识别可能就派不上用场了,这时候就会需要一些额外专用的应用程序代码。
其他的格式则可能需要安装包含了相应插件的Jar包;这一部分的详细信息在下一章。在安装了一个插件后,对应的新型格式应该在程序代码没有任何改动的前提下自动被支持。
调用ImageIO.getReaderFormatNames
方法可以得到所有支持被读取的格式集合。该方法返回一个包含所有可用格式信息的String
类型的数组,比如“gif”和“png”等。
将图片按被支持的格式写入文件同样很简单:
BufferedImage bi;
File f = new File("c:\images\myimage.png");
ImageIO.write(im, "png", f);
被支持写入的格式列表可以通过调用ImageIO.getWriterFormatNames
方法来获取到。
3.2 进阶
上文提到的方法对于简单的应用来说足够了。然而,Image I/O API 对编写复杂应用程序提供了更加强大的功能。为了使用本API的高阶功能,应用程序可能需要直接使用API中ImageReader
和ImageWriter
这些部分。