第一次做小程序海报分享,感觉canvas还是有点难度的。
所以用了JAVA后端生成,JAVA用了?ImageCombiner 组件去开发,整体来说感觉还是便捷很多的。
<dependency>
<groupId>com.freewayso</groupId>
<artifactId>image-combiner</artifactId>
<version>2.6.5</version>
</dependency>
下面我把关键代码加一下:
//文件的话,放在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, // 下载url
success (res) {
// 下载完成后转发
wx.showShareImageMenu({
path: res.tempFilePath,
success() {},
fail: console.error,
})
},
fail: console.error,
})