同福

Java使用BufferedImage获取图片尺寸、裁剪图片、缩小图片、拉伸图片、生成缩略图【20210515】

介绍

介绍

福哥要在项目里面对用户上传的图片进行裁剪、缩小、拉伸等等加工处理。之前用了Thumbnailator这个工具,结果Thumbnailator只能生成图片缩略图却不能裁剪图片。最后发现使用BufferedImage就可以晚上裁剪图片、缩小图片、拉伸图片这些处理功能了。

下面福哥就给大家讲解一下如何通过BufferedImage完成图片的裁剪、缩小、拉伸处理。

教程

生成BufferedImage

要加工图片之前首先需要得到一个BufferedImage对象,通常情况下我们只有图片的保存路径,可以通过下面的方法得到BufferedImage对象。

BufferedImage bi = ImageIO.read(new File(imagePath));

c28f75ad262d0447.jpg

获取图片尺寸

得到了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);

011ff89eceac7132.jpg

缩小拉伸图片

有了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);

42f4ffd83453bcda.jpg

任意缩小

自定义宽度和高度的缩小,这种方式缩小后的图片比例会被破坏掉。

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);

c01f8f74c9138524.jpg

保存图片

图片处理好了就可以通过ImageIO对象将它保存起来了。

ImageIO.write(newBI, "jpg", "D:/demo.jpg");

总结

今天福哥和大家分享了使用BufferedImage对象加工图片的方法,在一般情况下的需求应该是够用了!