第一次做小程序海报分享,感觉canvas还是有点难度的。
所以用了JAVA后端生成,JAVA用了 ImageCombiner 组件去开发,整体来说感觉还是便捷很多的。
<dependency><groupId>com.freewayso</groupId><artifactId>image-combiner</artifactId><version>2.6.5</version>
</dependency>
具体使用的话看连接:https://gitee.com/dromara/image-combiner/#12-imagecombiner%E8%83%BD%E5%A4%9F%E5%81%9A%E4%BB%80%E4%B9%88
下面我把关键代码加一下:
//文件的话,放在static静态目录即可。
BufferedImage bf= ImageIO.read(ImageUtil.class.getResource("/static/share.jpg"));
//linux环境的话,是没有中文字体的,需要将字体也一起打包进入jar包里面String path="/Alibaba-PuHuiTi-Regular.ttf";ImageCombiner combiner = new ImageCombiner(bf, OutputFormat.JPG);combiner.addTextElement("xxxxx",path, 60, 180, 100);//组合图片combiner.combine();//生成bufferImage,返回BufferedImage combinedImage = combiner.getCombinedImage();return combinedImage;
在controller端的话
@GetMapping("/getOrderShareImg")public void loadShare(Long id, HttpServletResponse response) throws Exception {//业务查询逻辑OrderVo ncOrderVo = orderService.queryById(id);//拿到outputStream,ServletOutputStream os = response.getOutputStream();BufferedImage bufferedImage = ImageUtil.genImage(ncOrderVo);//write即可ImageIO.write(bufferedImage,"jpg",os);os.close();}
小程序端的话
wx.downloadFile({url: request.BASE_URL+'api/wxapp/getOrderShareImg?id='+this.data.order.id, // 下载urlsuccess (res) {// 下载完成后转发wx.showShareImageMenu({path: res.tempFilePath,success() {},fail: console.error,})},fail: console.error,})