介绍
介绍
福哥要在项目里面对用户上传的图片进行裁剪、缩小、拉伸等等加工处理。之前用了Thumbnailator这个工具,结果Thumbnailator只能生成图片缩略图却不能裁剪图片。最后发现使用BufferedImage就可以晚上裁剪图片、缩小图片、拉伸图片这些处理功能了。
下面福哥就给大家讲解一下如何通过BufferedImage完成图片的裁剪、缩小、拉伸处理。
教程
生成BufferedImage
要加工图片之前首先需要得到一个BufferedImage对象,通常情况下我们只有图片的保存路径,可以通过下面的方法得到BufferedImage对象。
BufferedImage bi = ImageIO.read(new File(imagePath));
获取图片尺寸
得到了BufferedImage对象就可以获取图片的宽度和高度了。
BufferedImage bi = ImageIO.read(new File(imagePath)); Integer width = bi.getWidth(); Integer height = bi.getHeight();
裁剪图片
有了BufferedImage对象就可以通过它的getSubimage方法进行图片的裁剪处理。getSubimage得到的返回值还是BufferedImage对象,方便我们进一步处理。
BufferedImage bi = ImageIO.read(new File(imagePath)); BufferedImage cropBI = bi.getSubimage(100, 100, bi.getWidth()-200, bi.getHeight()-200);
缩小拉伸图片
有了BufferedImage对象就可以通过getScaledInstance方法进行图片的缩小拉伸处理。getScaledInstance返回的是Image对象,需要进行一个转换才能变成BufferedImage对象。
等比例缩小
根据原图尺寸进行等比例的缩小,这种方式缩小后的图片和原图比例是一样的。
BufferedImage bi = ImageIO.read(new File(imagePath)); Integer newWidth = (int)(bi.getWidth() * 0.1); Integer newHeight = (int)(bi.getHeight() * 0.1); BufferedImage newBI = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB); newBI.getGraphics().drawImage(imgBI.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);
任意缩小
自定义宽度和高度的缩小,这种方式缩小后的图片比例会被破坏掉。
BufferedImage bi = ImageIO.read(new File(imagePath)); Integer newWidth = 480; Integer newHeight = 640; BufferedImage newBI = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB); newBI.getGraphics().drawImage(imgBI.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);
保存图片
图片处理好了就可以通过ImageIO对象将它保存起来了。
ImageIO.write(newBI, "jpg", "D:/demo.jpg");
总结
今天福哥和大家分享了使用BufferedImage对象加工图片的方法,在一般情况下的需求应该是够用了!