Graphics2D Java自带的图片处理库,性能够用,用于一般的图片处理已经够用了。
首先我们来看一张马蜂窝的海报
海报里面有 花呀,草呀,文字,用户头像,二维码,还有美女,从专业角度来讲这些都是元素,一张图片上的各类元素。
首先我们需要提取这些元素,对元素进行分类,像花呀,草呀,二维码,美女都是一张图片或者几张图片合在一起,还有文字,剩下的就是各种图形,如图中“新疆”部分有个黄色的矩形,用户头像有一个半透明的圆角矩形,“一次都不能错过的的体验”部分还有透明带有边框的矩形。
这下元素就分好类了: 图片,文字,图形
下面我们来看看元素对应的属性
图片:一张图片肯定大小吧,也就是长宽,在海报的中的位置,也就是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("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
注意:代码只是一个 demo ,并没有经过严格的测试,只是为大家生成海报提供一种思路,直接使用可能存在bug。