java可以对图片文件进行一些处理,如放大或缩小图片。处理图片需要用到java.awt包,下面来介绍几个相关类。
java.awt.Image:所有图形图像的超类,一个类实例即表示一个图形图像对象;特别的,一个图片文件的类表示即是一个Image对象,将图片转换成Image对象后,便方便的对图片进行操作。Image类主要子类有BufferedImage、RenderedImage、ToolkitImage等。
javax.imageio.ImageIO:包含若干处理图形图像的静态方法,如图形图像的编、解码;以及在图片文件/流/url和Image对象之间的读写转换。ImageIO也可以用来判定一个图片类型是否在此类中注册,注册的图片类型便可以进行读写和编解码操作。
java.awt.Graphics2D:画图工具。
1、判定一个图片格式是否在ImageIO中注册:
public static String isimage(File file) {
//获取被当前已注册 reader 集合所理解的所有正式/非正式格式名称
String[] formatnames=ImageIO.getReaderFormatNames();
String format=file.getName().substring(file.getName().lastIndexOf('.')+1);
for(String s:formatnames)
if(format.equals(s))
return format;
return null;
}
2、对一个已注册格式的图片文件进行指定大小的缩放:
//变量说明:
//src:源图片文件
//desk:新建的空文件,可以将缩后的图片写入此文件
//format:图片文件的格式
//第一步,通过ImageIO的静态方法read()读取一个图片文件,使其转换为一个Image对象,方便操作。
BufferedImage srcimage=ImageIO.read(src);
//第二步,通过Image对象方法getScaledInstance()方法放缩原Image对象,并生成一个新的Image对象;
//其中参数值的前两位表示放缩后图片的像素值,第三个参数是Image的固定字段,表示缩放优先级。
Image tempimage=srcimage.getScaledInstance(width,height,hints);
//第三步,新建一个新的BufferedImage对象,长宽值与tempimage保持一致,imageType参数与srcimage保持一致,
//可通过Image.getType()方法获得此值。
BufferedImage deskimage=new BufferedImage(width,height,srcimage.getType());
//第四步,获取deskimage的画笔工具Graphics2D对象,并将tempimage画到deskimage中
Graphics2D graph=deskimage.createGraphics();
//首参数表示被画对象,次参和三参表示开始画的位置在画布(deskimage)的坐标。
graph.drawimage(tempimage,0,0,null);
//第五步,通过ImageIO的write()方法将deskimage写到desk文件中,需要指定图片格式(字符串表示)
ImageIO.write(deskimage,format,desk);
//之所以中间需要将tempimage转换到deskimage,是因为ImageIO的write()方法只接收renderedImage对象,而由
//getScaleInstance()方法获得的Image并不是renderedImage对象及其子类,而BufferedImage是renderedImage的子类。