# easyposter **Repository Path**: MarioL/easyposter ## Basic Information - **Project Name**: easyposter - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 7 - **Created**: 2021-05-21 - **Last Updated**: 2024-04-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Easy Poster **java的awt绘制海报的简单工具** 一个简单的,便于扩展的绘制海报工具包 ## 前言 > 微信后台生成海报一般都是一个模板写死,然后就完事了,过了不久让修改个模板,就又要看半天,还要考虑是否重新复制一份改一改,越来越多的重复代码,全在一个图片类里,然后就越来越乱。这两天用设计模式处理了一下,让以后修改模板,新增模板更舒服一点。 ## 效果展示 图片过大, 如不显示,请跳转查看 ## 设计思想 - 装饰者模式 - 责任链模式 - 建造者模式(lombok) ## 快速上手 - demo分支可以更好的帮助你理解使用方式 - 看效果请直接运行demo分支里的 PosterTest - 自定义海报请按照demo分支下的content目录下的类对自身业务兼容 - 如果装饰器不满足你的需求, 请对decorators扩展 - 绘制请让设计给出类似蓝湖的像素图, 仿照PosterTest按着填一下就ok - 有简单的注解支持 - 项目仅引入了lombok简化代码(1.0 版本包含有spring core) maven ```xml com.github.quaintclever easyposter 1.2 ``` gradle ```groovy // https://mvnrepository.com/artifact/com.github.quaintclever/easyposter compile group: 'com.github.quaintclever', name: 'easyposter', version: '1.2' ``` ## 注解样例 **海报定义类** ```java /** * @author quaint * 30 March 2020 * @since 1.0 */ @EqualsAndHashCode(callSuper = true) @Data @Builder public class SamplePoster extends AbstractDefaultPoster { /** * 背景图 */ @PosterBackground(width = 666,height = 365) private BufferedImage backgroundImage; /** * 头像 */ @PosterImageCss(position = {27,27},width = 36, height = 36, circle = true) private BufferedImage head; /** * 昵称 */ @PosterFontCss(position = {71,32}, color = {255,255,255}) private String nickName; /** * 广告语 */ @PosterFontCss(position = {27,70},center = true, size = 22, color = {255,255,255}, canNewLine={1,221,7}) private String slogan; /** * 主图 */ @PosterImageCss(position = {27,172},width = 168,height = 168) private BufferedImage mainImage; @Tolerate public SamplePoster() {} } ``` **海报绘制** ```java /** * 绘制海报本地测试 * @author quaint * 21 February 2020 * @since 1.0 */ public class PosterTest { public static void main(String[] args) throws Exception{ // 测试注解, 图片请自行添加到resources下 ClassPathResource 需要引入spring BufferedImage background = ImageIO.read(new ClassPathResource("image/yayi.png").getInputStream()); BufferedImage head = ImageIO.read(new ClassPathResource("image/headimage.jpg").getInputStream()); SamplePoster poster = SamplePoster.builder() .backgroundImage(background) .head(head) .nickName("Quaint") .slogan("命运多舛,痴迷淡然。挥别了青春,数不尽的车站。甘于平凡,却不甘平凡地溃败。") .mainImage(head) .build(); PosterDefaultImpl impl = new PosterDefaultImpl<>(); BufferedImage test = impl.annotationDrawPoster(poster).draw(null); ImageIO.write(test,"png",new FileOutputStream("annTest.png")); } } ```