网站首页 > 精选教程 正文
简介
当下的互联网电商发展是如火如荼,作为Java Coder,不可避免地会面对各种各样的客户,迎接千奇百怪的需求.
当你的客户让你每天给VIP客户发一个新颖的图片贺卡,或者你的老板让你每天产出一批美轮美奂的图文电邮,甚至于你的甲方爸爸让你给每个用户生成专属的页面背景,等等这类挠头的要求.
你的第一反应是拒绝还是准备让甲方准备好票子来买个AI助手?
今天,我来给大家推荐一个大神杰作,简单又实用的Java服务端图片合成工具,完全基于Jdk的Graphics扩展实现,使用超简单,性能还不错!
关注更新,提升自我,相信这里绝对有值得你收藏的干货 !
ImageCombiner
- Maven依赖坐标
<dependency>
<groupId>com.freewayso</groupId>
<artifactId>image-combiner</artifactId>
<!-- 强烈建议使用2.6.3之后的版本. -->
<version>2.6.5</version>
</dependency>
- MIT开源
https://gitee.com/dromara/image-combiner
话不多说,实践见真知!
我们定义个测试类,来体验各场景中,ImageCombiner的魅力:
class TestImageCombiner {
static String pathImage(String relativePath){
return "file:///G:/图片/"+relativePath;
}
}
场景1. 简单合并图像
- 我们准备把这两个小图片合并成一张图片
/**
* 简单合并图片
*
*/@Test
void scene1() throws Exception {
/*先定义一个60 * 60的背景板,图片格式定义为PNG*/
ImageCombiner combiner = new ImageCombiner(60, 60, OutputFormat.PNG);
/*添加第一张图片,设置高度为40.
*也可以在调用addImageElement方法时直接设定,只是感觉链式调用要美观一些.
* */
/*addImageElement方法有4个重载:
* addImageElement (String imgUrl, int x, int y) => ImageElement
* addImageElement(BufferedImage image,int x, int y) => ImageElement
* addImageElement(String imgUrl,int x, int y, int width,int height,ZoomMode ZoomMode) => ImageElement
* addImageElement(BufferedImage image,int x, int y, int width,int height,ZoomMode zoomMode) =>ImageElement
* */
combiner.addImageElement(pathImage("绘制矩形.png"), 0, 0).setHeight(40).setCenter(true);
combiner.addImageElement(pathImage("绘制矩形 (1).png"), 0, 20).setHeight(40).setCenter(true);
combiner.combine();
//保存到本地
combiner.save("G://图片/scene1.png");
}
- 合并结果如下:
- 我们也可以给合并结果添加边框:
// ......
// 给合并结果添加边框
combiner.addRectangleElement(0,0,60,60).setBorderSize(10);
combiner.combine();
//保存到本地
combiner.save("G://图片/scene1.png");
- 添加边框效果如下:
场景2. 背景图上叠加内容
预设一个背景图,在背景上添加文字和图片.
- 叠加文字
/**
* 背景图上叠加内容
*/
@Test
void scene2() throws Exception {
// 预设背景图
/* ImageCombiner以下3个构造器,传入背景图支持网络协议:[https?],也支持[file]协议.
* 同样支持[BufferedImage]参数
* ImageCombiner(String bgImageUrl, OutputFormat outputFormat)
* ImageCombiner(BufferedImage bgImage, OutputFormat outputFormat)
* ImageCombiner(String bgImageUrl, int width, int height, ZoomMode zoomMode, OutputFormat outputFormat)
* ImageCombiner(BufferedImage bgImage, int width, int height, ZoomMode zoomMode, OutputFormat outputFormat)
* */
ImageCombiner combiner = new ImageCombiner(pathImage("bg1.png"), OutputFormat.PNG);
combiner.addTextElement("图片合并哪家强", "微软雅黑", 30, 0, 0).setColor(Color.WHITE).setCenter(true);
combiner.combine();
combiner.save("G://图片/scene2.png");
}
- 叠加文字效果如下:
- 也可以自定义Font设置字体:
Font font = new Font("宋体", Font.BOLD | Font.ITALIC, 30);
combiner.addTextElement("ImageCombiner", font,0 , 40).setColor(Color.getHSBColor(100, 100, 100)).setCenter(true);
- 效果挺不错:
- 叠加另一张图片:
combiner.addImageElement(pathImage("java.png"), 0, 120).setCenter(true);
- 效果如下:
- 在叠加的时候设置叠加效果:
combiner.addImageElement(pathImage("java.png"), 0, 120).setCenter(true)
/*添加圆角*/
.setRoundCorner(30)
/*设置透明度*/
.setAlpha(0.8F)
/*旋转角度*/
.setRotate(20)
/*高斯模糊,实现毛玻璃效果*/
.setBlur(1);
- 效果如下:
场景3.实现二维码名片效果
/**
* 实现二维码名片效果
*/
@Test
void scene3() throws Exception{
/*先定义一个300 * 500 的背景板,图片格式定义为PNG*/
ImageCombiner combiner = new ImageCombiner(300, 500, OutputFormat.PNG);
/*设置画板圆角*/
combiner.setCanvasRoundCorner(50);
combiner.addRectangleElement(0,0,300,500).setBorderSize(300)
/*设置颜色*/
.setColor(255,255,255)
/*设置纵向渐变*/
.setGradient(Color.WHITE,new Color(2, 54, 144),0,500, GradientDirection.TopBottom);
combiner.addImageElement(pathImage("qrcode.png"),0,30).setCenter(true)
/*宽高和圆角大小一样时,即为圆形.*/
.setWidth(530).setRoundCorner(530);
combiner.addRectangleElement(0,320,250,150).setColor(255,255,255).setCenter(true).setBorderSize(5).setRoundCorner(30);
combiner.addTextElement("ImageCombiner是一个专门用于Java服务端图片合成的工具,简单实用!","楷体",Font.BOLD|Font.ITALIC,25,0,330)
/*设置最大宽度自动换行*/
.setAutoBreakLine(240)
.setColor(new Color(255,255,255))
.setCenter(true);
combiner.combine();
combiner.save("G://图片/scene3.png");
}
- 效果相当不错:
场景4.图片水印效果
- 对背景图片添加图片和文本水印:
/**
* 图片水印效果
*/
@Test
void scene4() throws Exception{
ImageCombiner combiner = new ImageCombiner(pathImage("bg1.png"), OutputFormat.PNG);
String watermark=pathImage("java.png");
String watermarkText="Java合并图片";
/*添加图片水印*/
combiner.addImageElement(watermark, 50, 50, 100, 0, ZoomMode.Width)
.setAlpha(0.7F)
.setRotate(10)
.setRoundCorner(20)
/*重复绘制-平铺效果*/
.setRepeat(true, 100, 80);
/*添加文本水印*/
combiner.addTextElement(watermarkText, 20, 100, 100)
/*字间距*/
.setSpace(0.1F)
.setAlpha(0.7F)
.setColor(Color.WHITE)
.setRotate(-20)
/*重复绘制-平铺效果*/
.setRepeat(true, 120, 50);
combiner.combine();
combiner.save("G://图片/scene4.png");
}
- 效果图如下:
N+场景. 相信你可以发现更多!
- 小技巧1
设置自动换行时,将宽度设置为0,即可实现竖向排列文本. - 小技巧2
图像圆角大小设置为大于或等于宽高,即可实现圆形绘制. - 小技巧3
TextElement#setAutoFitWidth设置文本内容自适应最大宽度,自动缩放字体.
回顾
ImageCombiner 当真是小身板大能量,自从用了它,系统中的各种图片需求都能轻松应对.
最常用的场景就是UI给出背景图,直接叠加海报文本,
每天不重样,天天有惊喜,客户喜欢,老板高兴,工作愉快!
感谢大神开源,支持开源!
更多Java知识,Spring Boot知识,实用干货,点击关注,持续更新!
猜你喜欢
- 2024-11-25 干货|一文搞定 uiautomator2 自动化测试工具使用
- 2024-11-25 Java去除PDF文件中的图片
- 2024-11-25 2021 年 Node.js 开发人员学习路线图
- 2024-11-25 Java之base64转化成图片文件
- 2024-11-25 wangEditor 实现ctrl+v粘贴图片并上传、word粘贴带图片
- 2024-11-25 姐姐带我玩转java设计模式(内附照片)- 代理模式
- 2024-11-25 base64转化为图片
- 2024-11-25 Java 给Excel图表设置背景颜色和背景图片
- 2024-11-25 一个支持将html转为PDF、图片,且支持PDF加水印的项目
- 2024-11-25 使用SpringBoot Schedule实现定时任务动态添加、修改、删除等操作
你 发表评论:
欢迎- 04-11Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- 04-11Java中你知道几种从字符串中找指定的字符的数量
- 04-11探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- 04-11Python字符串详解与示例(python字符串的常见操作)
- 04-11java正则-取出指定字符串之间的内容
- 04-11String s1 = new String("abc");这句话创建了几个字符串对象?
- 04-11java判断字符串中是否包含某个字符
- 04-11关于java开发中正确的发牌逻辑编写规范
- 最近发表
-
- Java面试“字符串三兄弟”String、StringBuilder、StringBuffer
- Java中你知道几种从字符串中找指定的字符的数量
- 探秘Java面试中问的最多的String、StringBuffer、StringBuilder
- Python字符串详解与示例(python字符串的常见操作)
- java正则-取出指定字符串之间的内容
- String s1 = new String("abc");这句话创建了几个字符串对象?
- java判断字符串中是否包含某个字符
- 关于java开发中正确的发牌逻辑编写规范
- windows、linux如何后台运行jar(并且显示进程名)
- 腾讯大佬私人收藏,GitHub上最受欢迎的100个JAVA库,值得学习
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)