首先我们来看一张马蜂窝的海报
海报里面有 花呀,草呀,笔墨,用户头像,二维码,还有美女,从专业角度来讲这些都是元素,一张图片上的各种元素。
首先我们须要提取这些元素,对元素进行分类,像花呀,草呀,二维码,美女都是一张图片或者几张图片合在一起,还有笔墨,剩下的便是各种图形,如图中“新疆”部分有个黄色的矩形,用户头像有一个半透明的圆角矩形,“一次都不能错过的的体验”部分还有透明带有边框的矩形。
这下元素就分好类了: 图片,笔墨,图形
下面我们来看看元素对应的属性
图片:一张图片肯定大小吧,也便是长宽,在海报的中的位置,也便是x y坐标
笔墨:大小,字体,颜色,坐标
图形:形状,颜色,坐标
有了元素我们还缺什么,画板,须要把元素画到哪里噻,这里画板一样平常有两种,一种是纯色的画板(如:白色),还有一种便是图片,我们也可以在一张图上做画噻;如果是纯色的画板那它肯定有颜色,长宽噻,如果是图片那它也会有长宽噻。
元素画入画板的顺序的不同,如果是同一个坐标会涌现覆盖的情形,以是我们采取构建的顺序去实行绘画。
测试代码
SamplePoster samplePoster = SamplePoster.build() .canvas(670,1307, Color.WHITE) .img(670,900,headImg) .graphical(620,60,-30,30,new Color(0, 0, 0, 90),EnumShape.RoundedRectangle,50,100) .img(30,30,30,50,avatarImg, EnumShape.Circular) .img(150,150,450,1050,qr,EnumShape.None) .text(34;out of Memory 像你分享了一篇游行条记",80,70,new Font("微软雅黑", Font.LAYOUT_NO_START_CONTEXT, 25),Color.white) .text("长按查看",480,1250,new Font("微软雅黑", Font.LAYOUT_NO_START_CONTEXT, 25),Color.lightGray) .text("875人以为本文很精彩",30,1230,new Font("微软雅黑", Font.LAYOUT_NO_START_CONTEXT, 30),Color.lightGray) .graphical(100,60,0,1100,Color.YELLOW) .text("上市 | 旅行条记",30,1150,new Font("微软雅黑", Font.CENTER_BASELINE, 35),Color.BLACK) .text("\"我叫小猪666\"的旅行条记",30,950,new Font("微软雅黑", Font.LAYOUT_NO_LIMIT_CONTEXT, 30),Color.BLACK) .text("上海哪拍最出片 上海周末玩什么 上海美食探店",30,1000,new Font("微软雅黑", Font.LAYOUT_NO_START_CONTEXT, 25),Color.lightGray); BufferedImage image = PosterDefaultDraw.draw(samplePoster);
看一下我们天生的海报
是不是也还是可以的
完全代码 Gitee https://gitee.com/distant/poster
把稳:代码只是一个demo,并没有经由严格的测试,只是为大家天生海报供应一种思路,直策应用可能存在bug。