海报生成器

最后更新于2019-04-27 11:13:20

poster-generater

⚡⚡⚡海报生成器. 只需要一个简单的 json 配置即可生成你需要的海报...

说明

此项目诞生有一段时间了,我本人也一直在使用这个程序,从一开始的 golang 版本,到现在的 java 版本,一路上也得到了许多朋友的支持和鼓励。 在 golang 版本的时候,就有朋友跟我说:『我非常喜欢这个项目,我非常希望加入到这个项目中来,但是我是从事JAVA开发的,可不可以弄一个 java 版本的』?加上我在 golang 开发中遇到了一些让我头疼的问题,以及常年写 OO(面向对象) 代码导致的惯性思维,让我在 golang 开发中备受煎熬。 所以今年年初的时候我决定把这个项目用 java 实现一遍,如今 java 版本已经发布,添加了许多使用特型,希望给大家带来更好的使用体验。同时也希望有能力的朋友可以和我一起完善这个项目(欢迎PR、issues),让更多的人享受到项目带来的便利。

感谢 sm.ms 提供的图床服务

适用场景

我希望这个项目用于渲染需要动态合成的图片,例如用户名片(需要动态渲染名字和头像等),而非一经渲染就恒定不变的,例如logo、banner等。虽然 poster-generater 两者都可以实现。

项目愿景

希望广大开发者可以不在为海报制作而烦恼。快速找到适合自己的海报,快速集成可扩展、高性能的海报渲染功能。

在线体验

点击 在线测试

如果点击 提交测试 后没有反应, 参考如下解决方案,点击加载不安全的脚本即可。 开源海报生成器 2.0,功能更强大,速度更快。 出现该问题的原因是因为 测试地址不是 https 协议,所以 chrome 会给以警告。

java 版本功能更丰富

  • 基于 java 开发,部署和二次开发更方便
  • 图片将上传到 公共 CDN,不占用主机磁盘,且速度更快
  • 支持结果缓存,相同的 海报配置 不会重复渲染,一次渲染持续保存,速度更快
  • 添加删除和查询结果 API
  • 支持生成二维码、文本换行和文本溢出等高级属性
  • 支持自定义字体,运行目录下新建 fonts 文件夹,里面放 ttf 格式字体就行。
  • 支持模板图片,减少网络图片加载,运行目录下新建 templates 文件夹,支持多种图片格式。
  • 缓存网络图片,减少网络图片加载
  • 支持企业定制化开发部署,详情请联系我

ps:自定义字体、模板图片、网络图片缓存路径均可配置。具体配置参考 example.application.properties

相关资源

下载

  1. 下载 jar 包
    $ wget http://static.janguly.com/poster-2.2.3-SNAPSHOT.jar
    

    你也可以 点击下载

  2. 克隆代码
    $ git clone https://github.com/qbhy/poster-generater.git
    

运行 jar

$ java -jar poster-2.2.3-SNAPSHOT.jar --server.port=8000 --poster.downloadPath=/var/poster/downloads

如果你不设置 server.port 参数,默认使用 8000。如果不设置 poster.downloadPath,默认使用当前目录下的 downloads 目录。你也可以添加 application.properties 或者 config/application.properties 文件进行配置

rest api

任何客户端发起 http 请求即可生产相应海报

  • 创建海报
    POST /poster
    

    需要 json 格式的海报参数

  • 找到海报
    GET /poster/{key}
    

    key 值为创建海报 json 的 md5 值

  • 删除海报
    DELETE /poster/{key}
    

    key 值为创建海报 json 的 md5 值

组件参数解释

config字段

| 字段            | 类型                     | 必填 | 描述                                       |
| --------------- | ------------------------ | ---- | ------------------------------------------ |
| width           | Number          | 是   | 画布宽度                                   |
| height          | Number          | 是   | 画布高度                                  |
| backgroundColor | String                 | 否   | 画布颜色                                  |
| blocks          | Object Array(对象数组) | 否   | 看下文                                     |
| texts           | Object Array(对象数组) | 否   | 看下文                                     |
| images          | Object Array(对象数组) | 否   | 看下文                                     |
| lines           | Object Array(对象数组) | 否   | 看下文                                     |

blocks字段

| 字段名          | 类型             | 必填 | 描述                                   |
| --------------- | ---------------- | ---- | -------------------------------------- |
| x               | Number | 是   | 块的坐标                               |
| y               | Number | 是   | 块的坐标                               |
| width           | Number | 否   | 如果内部有文字,由文字宽度和内边距决定 |
| height          | Number | 是   |                                        |
| paddingLeft     | Number | 否   | 内左边距                               |
| paddingRight    | Number | 否   | 内右边距                               |
| borderWidth     | Number | 否   | 边框宽度                               |
| borderColor     | String           | 否   | 边框颜色                               |
| backgroundColor | String           | 否   | 背景颜色                               |
| borderRadius    | Number   | 否   | 圆角                                   |
| text            | Object           | 否   | 块里面可以填充文字,参考texts字段解释  |
| index          | Int              | 否   | 层级,越大越高                         |

texts字段

| 字段名         | 类型             | 必填 | 描述                                                         |
| -------------- | ---------------- | ---- | ------------------------------------------------------------ |
| x              | Number | 是   | 坐标                                                         |
| y              | Number | 是   | 坐标                                                         |
| text           | String\|Object   | 是   | 当Object类型时,参数为text字段的参数,marginLeft、marginRight这两个字段可用(示例请看下文) |
| fontSize       | Number | 是   | 文字大小                                                     |
| color          | String           | 否   | 颜色                                                         |
| lineHeight     | Number | 否   | 行高                                                         |
| lineNum        | Int              | 否   | 根据宽度换行,最多的行数                                     |
| width          | Number | 否   | 没有指定为画布宽度,默认为x轴右边所有宽度                                           |
| baseLine       | String           | 否   | top\| middle\|bottom基线对齐方式                             |
| textAlign      | String           | 否   | left\|center\|right对齐方式                                  |
| index         | Int              | 否   | 层级,越大越高                                               |
| fontFamily     | String           | 否   | 默认字体为'pingfangtf' ,支持自定义字体      |

images字段

| 字段         | 类型             | 必填 | 描述                                      |
| ------------ | ---------------- | ---- | ----------------------------------------- |
| x            | Number | 是   | 右上角的坐标                              |
| y            | Number | 是   | 右上角的坐标                              |
| url          | String           | 是   | 图片url(**需要添加到下载白名单域名中**)也支持本地图片 |
| width        | Number | 是   | 宽度(**会根据图片的尺寸同比例缩放**)    |
| height       | Number | 是   | 高度(**会根据图片的尺寸同比例缩放**)    |
| borderRadius | Number | 否   | 圆角,跟css一样                           |
| index       | Int              | 否   | 层级,越大越高                            |
| qrCode       | Bool              | 否   | 是否二维码图片,如果是,url内容就是二维码内容  |

lines字段

| 字段   | 类型             | 必填 | 描述           |
| ------ | ---------------- | ---- | -------------- |
| startX | Number | 是   | 起始坐标       |
| startY | Number | 是   | 起始坐标       |
| endX   | Number | 是   | 终结坐标       |
| endY   | Number | 是   | 终结坐标       |
| width  | Number | 是   | 线的宽度       |
| color  | String           | 否   | 线的颜色       |
| index | Int              | 否   | 层级,越大越高 |

反馈

扫描下面的二维码加群,如果扫码进不去(人数超过100后不能扫码进群),扫二维码加我好友,拉你进【poster交流群】 41556334643_.pic.jpg poster交流群

96qbhy@gmail.com
github:qbhy/poster-generater