前言
- 代码都上传到GitHub了,这里仅仅是贴出来主要部分,GitHub传送门:https://github.com/fengfanli/draw_poster_echarts
- 海报制作的所有博客和一些问题:
- 总博客:java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
文字换行算法详解
,传送门:java制作海报一:java使用Graphics2D 在图片上写字,文字换行算法详解头像切割成圆形方法详解
,传送门:java制作海报二:java使用Graphics2D 在图片上合成另一个照片,并将照片切割成头像,头像切割成圆形方法详解获取微信二维码详情
,传送门:java制作海报三:获取微信二维码详情,并改变大小,合成到海报(另一张图片)上java BufferedImage 转 InputStream
和png 图片合成到模板(另一个图片)上时,透明部分变成了黑色
,传送门:java制作海报四:java BufferedImage 转 InputStream 上传至OSS。png 图片合成到模板(另一个图片)上时,透明部分变成了黑色java 整合echarts 画出 折线图
,传送门:Graphics2D的RenderingHints方法参数详解,包括解决文字不清晰,抗锯齿问题
,传送门:java制作海报六:Graphics2D的RenderingHints方法参数详解,包括解决文字不清晰,抗锯齿问题项目部署到linux下中文不显示,echarts图上的中文也不显示问题
,传送门:java制作海报七:java Graphics2D 合成图片 在 linux下中文不显示,echarts图上的中文也不显示问题
- 本次博客主要是 稍微说一下获取微信二维码详情,这里的代码都在
Main_CreatePosterAndEchart.java
中
一、描述
这里需要获取微信小程序二维码,放到海报的左下角,其实获取二维码的过程,看微信开发文档即可。
二、逻辑代码
// 画 二维码 并改变大小
// 1. 先 获取二维码(二维码携带一个参数)
InputStream erWeiMa = getErWeiMa(1);
// 2. 初始化并的改变大小
BufferedImage logoImg = PosterUtil.drawInitAndChangeSize(null, erWeiMa, 130, 130);
// 将二维码保存到本地
PosterUtil.save(logoImg, "png", "d:\\test.png");
// 3. 画二维码
PosterUtil.drawImage(bufferedImage, logoImg, 532, 1108);
三、获取二维码代码
id 是放到二维码里的参数。返回 输入流。
/**
* @return java.io.InputStream
* @Author fengfanli
* @Description //TODO 从微信平台 获取小程序二维码
* @Date 16:53 2021/4/1
* @Param []
**/
public static InputStream getErWeiMa(Integer id) {
// 获取二维码:1、先获取access_token 2、在获取 二维码
String appId = PropertiesFileUtil.getInstance("app").get("wx.app.ip");
String appSecret = PropertiesFileUtil.getInstance("app").get("wx.app.secret");
System.out.println("appId==" + appId + ";appSecret==" + appSecret);
// 获取 access_token
String getUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appId + "&secret=" + appSecret;
System.out.println("getUrl==" + getUrl);
String str = HttpUtil.sendGet(getUrl);
JSONObject json = (JSONObject) JSONObject.parse(str);
String access_token = (String) json.get("access_token");
System.out.println("access_token:" + access_token);
// 获取 二维码图片流
String postURL = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + access_token;
System.out.println("postURL==" + postURL);
JSONObject jsonObject = new JSONObject();
// 这里往二维码里放入前端传过来的 id,前端获取之后,根据id 去获取详情
jsonObject.put("scene", id);
String scene = JSONObject.toJSONString(jsonObject);
InputStream inputStream = null;
inputStream = HttpUtil.sendPostForErWeiMa(postURL, scene);
return inputStream;
}
四、将二维码画(合成)到模板上
1. 描述
这个方法在PosterUtil上
先初始化,在改变大小,
2. 初始化代码和改变大小 代码
/**
* @return java.awt.image.BufferedImage
* @Author fengfanli
* @Description //TODO 初始化模板并改变宽度和高度
* @Date 9:56 2021/3/30
* @Param [path, width, height]
**/
public static BufferedImage drawInitAndChangeSize(String path, InputStream inputStream, int width, int height) throws Exception {
BufferedImage canvas = null;
if (path != null) {
URL url = new URL(path);
canvas = ImageIO.read(url);
}
if (inputStream != null) {
canvas = ImageIO.read(inputStream);
}
canvas = changeSize(canvas, width, height);
return canvas;
}
/**
* @return java.awt.image.BufferedImage
* @Author fengfanli
* @Description // TODO 改变宽度和高度:先画一个空白的图,再将需要改变大小的图 画上去,再限制大小
* @Date 9:56 2021/3/30
* @Param [originalImage, width, height]
**/
public static BufferedImage changeSize(BufferedImage originalImage, int width, int height) {
// 抗锯齿
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); // originalImage.getType() 改为 BufferedImage.TYPE_INT_RGB
Graphics2D g2d = image.createGraphics();
image = g2d.getDeviceConfiguration().createCompatibleImage(width, height, Transparency.OPAQUE);
g2d = image.createGraphics();
g2d.drawImage(originalImage, 0, 0, width, height, null);
g2d.dispose();
return image;
}
3. 合成图 代码
/**
* @return java.awt.image.BufferedImage
* @Author fengfanli
* @Description //TODO 在背景模板上放置 image
* @Date 9:57 2021/3/30
* @Param [canvas, logo, logoX, logoY]
**/
public static void drawImage(BufferedImage canvas, BufferedImage logo, int logoX, int logoY) {
Graphics2D g2d = canvas.createGraphics();
//g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 1));
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2d.drawImage(logo, logoX, logoY, null);
g2d.dispose();
}