# 一. 新手介绍
## 1.1 项目背景
最近公司上了不少传播方面的需求,免不了合成各种营销图片,图片合成本身并不是什么高深的技术,但用底层api去搞确实繁琐,于是抽时间封装了一个小工具,初衷是解放生产力,后来发现挺好使,那就开源吧,花了一个整天重新整理了一下代码,作为自己从业十年第一个开源项目(打破零记录,哈哈),希望能够帮助到需要的小伙伴~
## 1.2 ImageCombiner能够做什么?
ImageCombiner是一个专门用于Java服务端图片合成的工具,没有很复杂的功能,简单实用,从实际业务场景出发,提供简单的接口,几行代码即可实现图片拼合(当然用于合成水印也可以),素材上支持图片、文本、矩形三种,支持定位、缩放、旋转、圆角、透明度、颜色、字体、字号、删除线、居中绘制、文本自动换行等特性,足够覆盖图片合成的日常需求。
## 1.3 先看一下效果
![avater](site/media/sample2.png)
### 基本功能展示(更多效果可自行探索)
![avater](site/media/sample3.png)
> 专门开了一个作品搜集&展示的issue,可以秀一秀成果,顺带分享下思路~
>
> <https://gitee.com/dromara/image-combiner/issues/I4FVGB>
## 1.4 UML
![avater](site/media/uml.png)
## 1.5 ImageCombiner怎么使用
ImageCombiner使用起来相当简单,主要的类只用一个,new一个ImageCombiner对象,指定背景图片和输出格式,然后加入各种素材元素,设置元素的位置、大小和效果(如圆角、颜色、透明度等),调用combine()方法即可。combine()方法直接返回BufferedImage对象,也可以调用getCombinedImageStream()获得流,方便上传oss等后续操作,或者调用save()方法保存到本地,调试的时候比较方便。
## 1.6 版本要求
项目不依赖任何框架,完全基于JDK本身编写,没有各种花里胡哨的东西,性能还是相当不错的。
# 二. 示例代码
## 2.1 安装
注意:合成图片若包含文字的话,开发机和服务器要先安装相应的字体,否则看不出效果,默认使用的字体为“阿里巴巴普惠体”(见font目录)。
PS:一些小伙伴反应安装了字体后仍然看不出效果,这多数是因为实际的字体名称跟你看到的文件名是不一样的,可以跑一下测试项目里的showFonts()方法,打印出系统可用字体列表,找一找你刚安装的字体的真实的名字。
在项目中加入以下依赖:
```xml
<dependency>
<groupId>com.freewayso</groupId>
<artifactId>image-combiner</artifactId>
<version>2.4.1</version>
</dependency>
```
## 2.2 最简单的例子
```java
public void simpleDemo() throws Exception {
//合成器(指定背景图和输出格式,整个图片的宽高和相关计算依赖于背景图,所以背景图的大小是个基准)
ImageCombiner combiner = new ImageCombiner("http://xxx.com/image/bg.jpg", OutputFormat.JPG);
//加图片元素
combiner.addImageElement("http://xxx.com/image/product.png", 0, 300);
//加文本元素
combiner.addTextElement("周末大放送", 60, 100, 960);
//执行图片合并
combiner.combine();
//可以获取流(并上传oss等)
InputStream is = combiner.getCombinedImageStream();
//也可以保存到本地
//combiner.save("d://image.jpg");
```
## 2.3 完整示例
```java
public void demo() throws Exception {
//图片元素可以是Url,也可以是BufferImage对象
String bgImageUrl = "http://xxx.com/image/bg.jpg"; //背景图
String qrCodeUrl = "http://xxx.com/image/qrCode.png"; //二维码
String productImageUrl = "http://xxx.com/image/product.jpg"; //商品图
BufferedImage waterMark = ImageIO.read(new URL("https://xxx.com/image/waterMark.jpg")); //水印图
BufferedImage avatar = ImageIO.read(new URL("https://xxx.com/image/avatar.jpg")); //头像
String title = "# 最爱的家居"; //标题文本
String content = "苏格拉底说:“如果没有那个桌子,可能就没有那个水壶”"; //内容文本
//创建合成器(指定背景图和输出格式,整个图片的宽高和相关计算依赖于背景图,所以背景图的大小是个基准)
ImageCombiner combiner = new ImageCombiner(bgImageUrl, 1500, 0, ZoomMode.Height, OutputFormat.JPG); //v1.1.4之后可以指定背景图新宽高了(不指定则默认用图片原宽高)
//针对背景和整图的设置
combiner.setBackgroundBlur(30); //设置背景高斯模糊(毛玻璃效果)
combiner.setCanvasRoundCorner(100); //设置整图圆角(输出格式必须为PNG)
//标题(默认字体为阿里普惠、黑色,也可以自己指定Font对象)
combiner.addTextElement(title, 0, 150, 1400)
.setCenter(true) //居中绘制(会忽略x坐标,改为自动计算)
.setAlpha(.8f) //透明度(0.0~1.0)
.setRotate(45) //旋转(0~360)
.setColor(Color.Red) //颜色
.setDirection(Direction.RightLeft); //绘制方向(从右到左,用于需要右对齐场景)
//内容(设置文本自动换行,需要指定最大宽度(超出则换行)、最大行数(超出则丢弃)、行高)
combiner.addTextElement(content, "微软雅黑", Font.BOLD, 40, 150, 1480)
.setSpace(.5f) //字间距
.setStrikeThrough(true) //删除线
.setAutoBreakLine(837, 2, 60); //自动换行(还有一个LineAlign参数可以指定对齐方式)
//商品图(设置坐标、宽高和缩放模式,若按宽度缩放,则高度按比例自动计算)
combiner.addImageElement(productImageUrl, 0, 160, 837, 0, ZoomMode.Width)
.setCenter(true) //居中绘制(会忽略x坐标,改为自动计算)
.setRoundCorner(46) //设置圆角
//头像(圆角设置一定的大小,可以把头像变成圆的)
combiner.addImageElement(avatar, 200, 1200)
.setRoundCorner(200); //圆角
//水印(设置透明度,0.0~1.0)
combiner.addImageElement(waterMark, 630, 1200)
.setAlpha(.8f) //透明度(0.0~1.0)
.setRotate(45) //旋转(0~360)
.setBlur(20) //高斯模糊(1~100)
.setRepeat(true, 100, 50); //平铺绘制(可设置水平、垂直间距)
//加入圆角矩形元素(版本>=1.2.0),作为二维码的底衬
combiner.addRectangleElement(138, 1707, 300, 300)
.setColor(Color.WHITE)
.setRoundCorner(50) //该值大于等于宽高时,就是圆形,如设为300
.setAlpha(.8f)
.setGradient(Color.yellow,Color.blue,GradientDirection.LeftRight); //颜色渐变
.setBorderSize(5); //设置border大小就是空心,不设置就是实心
//二维码(强制按指定宽度、高度缩放)
combiner.addImageElement(qrCodeUrl, 138, 1707, 186, 186, ZoomMode.WidthHeight);
//价格(元素对象也可以直接new,然后手动加入待绘制列表)
TextElement textPrice = new TextElement("¥1290", 60, 230, 1300);
textPrice.setColor(Color.red); //红色
textPrice.setStrikeThrough(true); //删除线
combiner.addElement(textPrice); //加入待绘制集合
//执行图片合并
combiner.combine();
//可以获取流(并上传oss等)
InputStream is = combiner.getCombinedImageStream();
//也可以保存到本地
//combiner.save("d://image.jpg");
}
```
更多示例请参见项目测试方法,[传送门](https://gitee.com/dromara/image-combiner/blob/master/src/test/java/com/freewayso/AppTest.java)
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
ImageCombiner图片合成工具 v2.4.1.zip (39个子文件)
说明.htm 4KB
image-combiner-master
site
coverpage.md 273B
lib
plugins
search.min.js 6KB
prism-java.min.js 2KB
themes
vue.css 12KB
docsify.min.js 55KB
media
baseline.png 4KB
compare.png 106KB
demo1-2.png 23KB
uml.png 25KB
sample3.png 179KB
sample2.png 129KB
code.png 49KB
demo.png 160KB
verticalText.png 22KB
index.html 812B
guide_cn.md 19KB
pom.xml 5KB
font
AlibabaPuHuiTiAll.zip 25.91MB
readme.txt 97B
src
test
java
com
freewayso
AppTest.java 30KB
main
java
com
freewayso
image
combiner
painter
PainterFactory.java 1KB
RectanglePainter.java 5KB
ImagePainter.java 11KB
TextPainter.java 6KB
IPainter.java 453B
element
ImageElement.java 4KB
CombineElement.java 2KB
TextElement.java 15KB
RectangleElement.java 4KB
ImageCombiner.java 14KB
enums
GradientDirection.java 396B
ZoomMode.java 451B
Direction.java 309B
OutputFormat.java 367B
LineAlign.java 321B
LICENSE 3KB
.gitignore 950B
README.md 19KB
共 39 条
- 1
资源评论
芝麻粒儿
- 粉丝: 5w+
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功