小程序生成商品分享二维码海报解决方案和实现方式JAVA
使用技术: Graphics , 七牛云 , 微信sdk(github上非常出名的wxjava,地址https://github.com/Wechat-Group/WxJava/)
直接上干货代码,每一步都有详细注释, TODO 的地址修改为自己的信息,一个合格的程序员懂得灵活运用代码. 如果想实现画入文字并且更具 \n 自动换行,可根据代码自行优化(已经实现自动换行).
@Test
public void share() throws Exception {
//创建图片
BufferedImage img = new BufferedImage(750, 1334, BufferedImage.TYPE_INT_RGB);
//开启画图
Graphics g = img.getGraphics();
//背景 -- 读取互联网图片
BufferedImage back = ImageIO.read(new URL("填写海报的背景图片链接"));
g.drawImage(back.getScaledInstance(750, 1334, Image.SCALE_DEFAULT), 0, 0, null); // 绘制缩小后的图
//商品 banner图
//读取互联网图片
BufferedImage priductUrl = ImageIO.read(new URL("填写自己的banner图,线上链接")); //TODO
g.drawImage(priductUrl.getScaledInstance(690,516,Image.SCALE_DEFAULT),29,61,null);
//文案标题
g.setFont(new Font("微软雅黑", Font.BOLD, 34));
g.setColor(new Color(29,29,29));
//绘制文字
g.drawString("填写文案标题", 31, 638);//TODO
//文案
g.setFont(new Font("微软雅黑", Font.PLAIN, 30));
g.setColor(new Color(47,47,47));
int fontlen = getWatermarkLength("填写文内容", g);//TODO
//文字长度相对于图片宽度应该有多少行
int line = fontlen / (back.getWidth() - 90);
//高度
int y = back.getHeight() - (line + 1) * 30 - 500;
//文字叠加,自动换行叠加
int tempX = 32;
int tempY = y;
//单字符长度
int tempCharLen = 0;
//单行字符总长度临时计算
int tempLineLen = 0;
StringBuffer sb =new StringBuffer();
for(int i=0; i < "填写文内容".length(); i++) {//TODO
char tempChar = "填写文内容".charAt(i);//TODO
tempCharLen = getCharLen(tempChar, g);
tempLineLen += tempCharLen;
if(tempLineLen >= (back.getWidth()-90)) {
//长度已经满一行,进行文字叠加
g.drawString(sb.toString(), tempX, tempY + 50);
//清空内容,重新追加
sb.delete(0, sb.length());
//每行文字间距50
tempY += 50;
tempLineLen =0;
}
//追加字符
sb.append(tempChar);
}
//最后叠加余下的文字
g.drawString(sb.toString(), tempX, tempY + 50); //价格背景
//读取互联网图片
BufferedImage bground = ImageIO.read(new URL("填写自己的价格背景图,七牛图片链接"));//TODO
// 绘制缩小后的图
g.drawImage(bground.getScaledInstance(160, 40, Image.SCALE_DEFAULT), 30, 1053, null); //限时促销价
g.setFont(new Font("微软雅黑", Font.PLAIN, 24));
g.setColor(new Color(255,255,255));
g.drawString("限时促销价", 50, 1080); //价格
g.setFont(new Font("微软雅黑", Font.PLAIN, 50));
g.setColor(new Color(249,64,64));
g.drawString("¥" + "填写商品的价格", 29, 1162);//TODO //原价
g.setFont(new Font("微软雅黑", Font.PLAIN, 36));
g.setColor(new Color(171,171,171));
String price = "¥" + "填写商品的原价";//TODO
g.drawString(price, 260, 1160);
g.drawLine(250,1148,260+150,1148); //商品名称
g.setFont(new Font("微软雅黑", Font.PLAIN, 32));
g.setColor(new Color(29,29,29));
g.drawString("填写商品名称", 30, 1229);//TODO //生成二维码返回链接
String url = "";//TODO
//读取互联网图片
BufferedImage qrCode = ImageIO.read(new URL(url));
// 绘制缩小后的图
g.drawImage(qrCode.getScaledInstance(174, 174, Image.SCALE_DEFAULT), 536, 1057, null); //二维码字体
g.setFont(new Font("微软雅黑", Font.PLAIN, 25));
g.setColor(new Color(171,171,171));
//绘制文字
g.drawString("扫描或长按小程序码", 515, 1260); g.dispose();
//保存到本地 生成文件名字
String iconKey = UUID.randomUUID().toString() +".png"; //TODO
//先将画好的海报写到本地
String picUrl = "填写自己电脑的路径" + iconKey; // TODO
File file = new File(picUrl);
ImageIO.write(img, "jpg",file);
//再将file上传至七牛返回链接存入数据库
//end
// TODO
} /**
* 获取水印文字总长度
*@paramwaterMarkContent水印的文字
*@paramg
*@return水印文字总长度
*/
public int getWatermarkLength(String waterMarkContent, Graphics g) {
return g.getFontMetrics(g.getFont()).charsWidth(waterMarkContent.toCharArray(),0, waterMarkContent.length());
}
public int getCharLen(char c, Graphics g) {
return g.getFontMetrics(g.getFont()).charWidth(c);
}

小程序生成商品分享二维码海报解决方案和实现方式JAVA的更多相关文章
- 微信小程序生成带参二维码
需求:生成小程序中的海报,需要小程序二维码可以使用户保存到本地在朋友圈分享 生成二维码工具类代码如下: package com.aone.foottalk.action.wx.util; import ...
- Android生成二维码--保存和分享二维码图片
之前写过生成自定义二维码的两篇文章:<Android生成自定义二维码><Android生成二维码–拍照或从相册选取图片>,下面就介绍一下Android应用内如何保存以及分享二维 ...
- 微信小程序条码、二维码生成模块
代码地址如下:http://www.demodashi.com/demo/13994.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- 微信小程序之生成二维码
最近项目中涉及到小程序的生成二维码,很是头疼,经过多次摸索,整理出了自己的一些思想方法,如有不足,欢迎指正. 首先完全按照小程序的结构依次填坑. pages--index.wxml <view ...
- 微信小程序,获取二维码
微信小程序,获取二维码 找到一篇很实用的博客,他已经写得很详细了,自己也懒得写,亲测有效 参考网址
- 根据短链生成二维码并上传七牛云(Java)
通过短链生成二维码并上传七牛云(Java) 前言 网上这种帖子其实也是很多,大部分搜出来的是CSDN的,然后点进去一看都几乎一样:所以这次给个自己实践的例子记录. 这次也是通过搜索得到的一部分能实现这 ...
- 微信小程序之生成图片分享 二维码分享 canvas绘制
如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ 如果解决不了,可以在文末进群交流. 添加画布 首先,在小程序里进行绘图操作需要用到<canvas>组件,步骤大致分为以 ...
- 转【微信小程序 四】二维码生成/扫描二维码
原文:https://blog.csdn.net/xbw12138/article/details/75213274 前端 二维码生成 二维码要求:每分钟刷新一次,模拟了个鸡肋,添加了个按分钟显示的时 ...
- 微信小程序 - 配置普通二维码跳小程序
普通二维码跳小程序规则: https://developers.weixin.qq.com/miniprogram/introduction/qrcode.html#%E5%8A%9F%E8%83%B ...
随机推荐
- R语言客户端RStudio快捷键大全
Console Description Windows & Linux Mac 将光标定位到控制台 Ctrl+2 Ctrl+2 清空控制台 Ctrl+L Command+L 将光标定位到行首 ...
- 5G[generation]的知识收集
一.什么是5G? G的英文是"5 Generation",即第五代无线通讯系统. 二.发展历程 1G的速率只有2.4k.2G是64k.3G是2M.4G{2013年12月,我国第四代 ...
- Linux下获取当前程序的绝对路径
在Linux开发应用时,我们常常需要在程序中获取当前程序绝对路径,我们可以通过readlink读取符号链接/proc/self/exe进行获取,这个符号链接代表当前程序,它的源路径就是当前程序的绝对路 ...
- jvm源码解读--03 常量池的解析ConstantPool
先看bt栈 (gdb) bt #0 ConstantPool::allocate (loader_data=0x7fe21802e868, length=87, __the_thread__=0x7f ...
- mysql orderby limit 翻页数据重复的问题
在mysql中我们通常会采用limit来进行翻页查询,比如limit(0,10)表示列出第一页的10条数据,limit(10,10)表示列出第二页.但是,当limit遇到order by的时候,可能会 ...
- Spring Cloud专题之五:config
书接上回: SpringCloud专题之一:Eureka Spring Cloud专题之二:OpenFeign Spring Cloud专题之三:Hystrix Spring Cloud 专题之四:Z ...
- js学习笔记之公告逐行显示
$(function(){ var newsListHeight = $(".news-list").height(); //获得内容的高度 var newsConHeight = ...
- ECShop 2.x/3.x SQL注入/任意代码执行漏洞
poc地址:https://github.com/vulhub/vulhub/blob/master/ecshop/xianzhi-2017-02-82239600/README.zh-cn.md 生 ...
- 大数据学习(20)—— Zookeeper介绍
ZooKeeper是什么 就像相声大师冯巩每次出场都说:"亲爱的观众朋友们,我想死你们啦"一样,我再强调一次,学习大数据官网很重要.Zookeeper官网看这里ZooKeeper ...
- ClickHouse与ES的优劣对比
优点: ClickHouse写入吞吐量大,单服务器日志写入量在50MB到200MB/s,每秒写入超过60w记录数,是ES的5倍以上. 查询速度快,官方宣称数据在pagecache中,单服务器查询速率大 ...