笔者最近接到一个新的任务,不是很难的功能,就是之前没有接触过,后端生成带参数的小程序二维码图片,并在图片下面添加一些文字。想在将代码分享给大家,期望可以给大家提供帮助。
一、首先生成小程序的分享二维码有三种方式
接口 A: 适用于需要的码数量较少的业务场景 生成小程序码,可接受 path 参数较长,生成个数受限。接口 B:适用于需要的码数量极多的业务场景 生成小程序码,可接受页面参数较短,生成个数不受限。接口 C:适用于需要的码数量较少的业务场景 生成二维码,可接受 path 参数较长,生成个数受限。 (已经移除)
具体的情况请参照 获取小程序码 | 微信开放文档
二、笔者使用第一种方式来生成分享二维码
1、第一步,获取access_token
private String getAccessToken(){String result = null;try {// 自己的 appid和secretresult = HttpUtil.get("https://api./cgi-bin/token" +"?grant_type=client_credential&appid=yourappId&secret=yoursecret",null,null);} catch (Exception e) {e.printStackTrace();}JSONObject jsonObject = JSON.parseObject(result);result = jsonObject.getString("access_token");System.out.println(result);return result;}
2、第二步,请求分享二维码的二进制流
String URL = "https://api./wxa/getwxacode?access_token=" + accessToken;JSONObject jsonObject = new JSONObject();jsonObject.put("path","pages/lsjindex/lsjindex");InputStream inputStream = null;try {inputStream = HttpUtil.postStream(URL, jsonObject.toJSONString(), null);} catch (Exception e) {e.printStackTrace();}BufferedImage bi = ImageIO.read(inputStream);
3、拼接文字
public BufferedImage createNewPic(String title,BufferedImage bi){BufferedImage image = new BufferedImage(500, 550, BufferedImage.TYPE_INT_RGB);//设置图片的背景色Graphics2D main = image.createGraphics();main.setColor(Color.white);main.fillRect(0, 0, 500, 550);//***********************插入中间广告图Graphics mainPic = image.getGraphics();if(logo!=null){mainPic.drawImage(logo, 40, 40, 400, 400, null);mainPic.dispose();}//***********************页面底部文字Graphics titleG = image.createGraphics();//设置区域颜色//titleG.setColor(Color.white);//填充区域并确定区域大小位置//titleG.fillRect(450, 50, 450, 50);//设置字体颜色,先设置颜色,再填充内容titleG.setColor(Color.BLACK);//设置字体Font titleFont = new Font("宋体", Font.BOLD, 14);titleG.setFont(titleFont);titleG.drawString(title, 200, 500);return image;}
4、最后生成图片并保存
File targetFile = new File("1.png");ImageIO.write(image, "png", targetFile);
完成的代码如下:
public class SmallAppTest {public static void main(String[] args) throws IOException {SmallAppTest test = new SmallAppTest();// 获得access_tokenString accessToken = test.getAccessToken();// 获得小程序二维码// POST https://api./wxa/getwxacode?access_token=ACCESS_TOKENString URL = "https://api./wxa/getwxacode?access_token=" + accessToken;JSONObject jsonObject = new JSONObject();jsonObject.put("path","pages/lsjindex/lsjindex");InputStream inputStream = null;try {inputStream = HttpUtil.postStream(URL, jsonObject.toJSONString(), null);} catch (Exception e) {e.printStackTrace();}BufferedImage bi = ImageIO.read(inputStream);BufferedImage image = test.createNewPic("测试", bi);// 加文字File targetFile = new File("1.png");ImageIO.write(image, "png", targetFile);// 关闭流inputStream.close();}public BufferedImage createNewPic(String title,BufferedImage logo){BufferedImage image = new BufferedImage(500, 550, BufferedImage.TYPE_INT_RGB);//设置图片的背景色Graphics2D main = image.createGraphics();main.setColor(Color.white);main.fillRect(0, 0, 500, 550);//***********************插入中间广告图Graphics mainPic = image.getGraphics();if(logo!=null){mainPic.drawImage(logo, 40, 40, 400, 400, null);mainPic.dispose();}//***********************页面头部Graphics titleG = image.createGraphics();//设置区域颜色//titleG.setColor(Color.white);//填充区域并确定区域大小位置//titleG.fillRect(450, 50, 450, 50);//设置字体颜色,先设置颜色,再填充内容titleG.setColor(Color.BLACK);//设置字体Font titleFont = new Font("宋体", Font.BOLD, 14);titleG.setFont(titleFont);titleG.drawString(title, 200, 500);return image;}private String getAccessToken(){String result = null;try {result = HttpUtil.get("https://api./cgi-bin/token" +"?grant_type=client_credential&appid=appId&secret=secret",null,null);} catch (Exception e) {e.printStackTrace();}JSONObject jsonObject = JSON.parseObject(result);result = jsonObject.getString("access_token");System.out.println(result);return result;}}
用到的工具类:Http工具类
Http工具类-Java工具类资源-CSDN下载
结果图
推荐:史上最全的java开发工具类 地址:GitHub - EricLoveMia/JavaTools: 基于JDK8 的工具类合集 maven项目