使用技术:  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的更多相关文章

  1. 微信小程序生成带参二维码

    需求:生成小程序中的海报,需要小程序二维码可以使用户保存到本地在朋友圈分享 生成二维码工具类代码如下: package com.aone.foottalk.action.wx.util; import ...

  2. Android生成二维码--保存和分享二维码图片

    之前写过生成自定义二维码的两篇文章:<Android生成自定义二维码><Android生成二维码–拍照或从相册选取图片>,下面就介绍一下Android应用内如何保存以及分享二维 ...

  3. 微信小程序条码、二维码生成模块

    代码地址如下:http://www.demodashi.com/demo/13994.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...

  4. 微信小程序之生成二维码

    最近项目中涉及到小程序的生成二维码,很是头疼,经过多次摸索,整理出了自己的一些思想方法,如有不足,欢迎指正. 首先完全按照小程序的结构依次填坑. pages--index.wxml <view ...

  5. 微信小程序,获取二维码

    微信小程序,获取二维码 找到一篇很实用的博客,他已经写得很详细了,自己也懒得写,亲测有效 参考网址

  6. 根据短链生成二维码并上传七牛云(Java)

    通过短链生成二维码并上传七牛云(Java) 前言 网上这种帖子其实也是很多,大部分搜出来的是CSDN的,然后点进去一看都几乎一样:所以这次给个自己实践的例子记录. 这次也是通过搜索得到的一部分能实现这 ...

  7. 微信小程序之生成图片分享 二维码分享 canvas绘制

    如果本文对你有用,请爱心点个赞,提高排名,帮助更多的人.谢谢大家!❤ 如果解决不了,可以在文末进群交流. 添加画布 首先,在小程序里进行绘图操作需要用到<canvas>组件,步骤大致分为以 ...

  8. 转【微信小程序 四】二维码生成/扫描二维码

    原文:https://blog.csdn.net/xbw12138/article/details/75213274 前端 二维码生成 二维码要求:每分钟刷新一次,模拟了个鸡肋,添加了个按分钟显示的时 ...

  9. 微信小程序 - 配置普通二维码跳小程序

    普通二维码跳小程序规则: https://developers.weixin.qq.com/miniprogram/introduction/qrcode.html#%E5%8A%9F%E8%83%B ...

随机推荐

  1. P2014选课

    洛谷P2014选课 一道树形DP题. f[i][j]表示i个点选j门课程的最大学分. 递推方程: for(int a=n;a>0;a--)//总共选择多少 for(int b=0;b<a; ...

  2. Vulnhub -- DC2靶机渗透

    信息收集 nmap开始扫描 只开了80端口,直接打开ip地址发现无法打开网页,但是进行了域名的跳转 !这里发现了一个问题,其实还开了一个7744端口,但是使用-sV的方式是扫描不出来的,使用-p-后可 ...

  3. Matplotlib不能显示中文和正负号的问题

    参考链接:https://www.jianshu.com/p/240ea3ae0dc9 在使用matplotlib画饼状图时,遇到了如下问题 UserWarning: findfont: Font f ...

  4. jboss未授权访问

    测试 poc地址 https://github.com/joaomatosf/jexboss

  5. noip模拟测试31

    终于有时间写博客了,前面一直咕咕咕都快变成一只公鸡了......这次考试,真的很意外,我在考场上觉得自己打出了T1的正解,样例一拍就过,还跑得嘎嘎快,然后T2,T3码了两个暴力,觉得自己应该能100p ...

  6. Windows协议 LDAP篇 - 域用户和计算机用户

    域用户 查询域用户 通过SAMR协议查询(net user就是通过这种协议查询的),samr也不是一种专门的协议,是一个RPC接口 在impacket里有个脚本samrdump.py,就是专门调用这个 ...

  7. 干了5年Android开发,突然感觉自己啥也不会,啥也不想干,还要继续吗?

    这是在某论坛看到的一名同行的吐槽: 我干了差不多5年,不过给人感觉跟只有两三年的人一样. 我觉得我不适合干程序员,主要是新东西的接受能力比其他人慢,Android技术又更新得很快,感觉总是跟不上.年纪 ...

  8. 【javaFX学习】(二) 面板手册

    移至http://blog.csdn.net/qq_37837828/article/details/78732591 更新 找了好几个资料,没找到自己想要的,自己整理下吧,方便以后用的时候挑选,边学 ...

  9. UserControl 加载动画

    效果:实现加载UserControl动画效果 cs代码如下 public class BaseModuleView : UserControl { private TranslateTransform ...

  10. sqlplus登录用户被锁问题

    oracle有三个默认的用户名和密码: 1.用户名:sys密码:change_on_install 2.用户名:system密码:manager 3.用户名:scott密码:tiger   当登录用户 ...