平台奖励创作,可能会升级VIP文章,可以移步我的公众号:【编程朝花夕拾】,且可获取首发内容。
01 引言
在日常开发中,尤其在电商领域,图片的处理犹如家常便饭。前端有自己的一套框架处理,如canvas
等工具。只要前端能做就交给前端团队处理了。
但是,总是前端团队处理不了的情况。如直接处理服务器的图片信息,对接第三方的图片信息等。这些都不需要经过前端的操作,就需要我们Java后端处理了。
你还在徒手撸Graphics2D
这玩意么,虽然不难,但是参数太多,用起来的比较繁琐。下来介绍两款不同领域的图片处理工具。
Thumbnailator
和 ImageCombiner
02 图片处理之王
Thumbnailator
是一款基于 Java 的轻量级开源图像处理库,以简洁 API 和高效性能著称。主要的亮点包括:
- 链式调用语法直观,支持缩放、旋转、裁剪、水印等操作;
- 自动保持图像质量,避免失真;
- 零第三方依赖,集成简单;
- 支持批量处理,性能优异
Github地址:
https://github.com/coobird/thumbnailator
2.1 Maven依赖的引入
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.20</version>
</dependency>
2.2 案例代码
@Test
void test01() throws IOException {
String path = "src/main/resources/bgimages/a.jpg";
String watermark = "src/main/resources/bgimages/watermark.png";
// 修改图片大小
Thumbnails.of(path)
// 图片大小
.size(600, 600)
// 缩放比例
// .scale(0.5)
// 旋转
.rotate(45)
// 水印
.watermark(Positions.BOTTOM_LEFT, ImageIO.read(new File(watermark)), 0.6f)
// 裁剪
.crop(Positions.BOTTOM_CENTER)
.toFile(new File("src/main/resources/bgimages/aa.jpg"));
}
通过 Thumbnails.of(path)
获取到图片的构造对象,可以设置处理当前图片的元素,如图片的大小、缩放的比例、旋转的角度、添加水印以及裁剪的位置等。最终保存到指定的位置。
2.3 案例展示结果
图片修改大小,旋转45度,加水印、裁剪中间位置的结果如下:
除此之外,还可以进行格式转化、以及批量处理等。感兴趣的赶紧去探索吧!
03 图片合成之王
ImageCombiner
是一个专门用于Java服务端图片合成的工具,没有很复杂的功能,简单实用,从实际业务场景出发,提供简单的接口,几行代码即可实现图片拼合(当然用于合成水印也可以),素材上支持图片、文本、矩形三种,支持定位、缩放、旋转、圆角、透明度、颜色、字体、字号、删除线、居中绘制、文本自动换行等特性,足够覆盖图片合成的日常需求。
ImageCombiner
同样来自国内顶级社区dromara
。
Gitee地址:
https://gitee.com/dromara/image-combiner
3.1 Maven依赖
<dependency>
<groupId>com.freewayso</groupId>
<artifactId>image-combiner</artifactId>
<version>2.6.9</version>
</dependency>
3.2 案例代码
@Test
void test02() throws Exception {
String path = "src/main/resources/bgimages/d.jpg";
String watermark = "src/main/resources/bgimages/watermark.png";
BufferedImage read = ImageIO.read(new File(path));
ImageCombiner imageCombiner = new ImageCombiner(read, OutputFormat.JPG);
//针对背景和整图的设置
imageCombiner.setBackgroundBlur(1); //设置背景高斯模糊(毛玻璃效果)
imageCombiner.setQuality(.8f); //设置图片保存质量(0.0~1.0,Java9以下仅jpg格式有效)
//加文本元素
imageCombiner.addTextElement("编程朝花夕拾", 50, 10, 10).setColor(Color.blue).setCenter(true);
//添加水印
imageCombiner.addImageElement(ImageIO.read(new File(watermark)), 0, 0);
imageCombiner.combine();
// InputStream combinedImageStream = imageCombiner.getCombinedImageStream();
imageCombiner.save("src/main/resources/bgimages/dd.jpg");
}
通过ImageCombiner
指定背景图,然后就可以在背景图上尽情加入各种元素。案例中设置背景的模糊度、以及质量,然后增加文本,并制定位置居中展示。增加了水印图片,最后输出图片。
3.3 案例结果展示
增加防盗水印以及「编程朝花夕拾」的文案。
04 小结
Thumbnailator
和 ImageCombiner
应用的场景完全不同。前者主要处理当前图片,可以对当期那图片旋转、裁剪等操作。而后者将图片作为背景如除了修改图片的模糊度和质量,其他的操作都是在背景图上增加元素。
这两款的够用了么?不够的话,就使用JDK自带的javax.imageio.ImageIO
或者apche的commons-imaging
自己封装吧,下一个大牛就是你。