背景:最近一个项目的优惠券模块,需要将优惠券的券号转换成二维码展示出来,并保证能够被扫码枪识别。

接着,简要说明下编码思路,或者说步骤:

  • 引入 qrcode 的Jar依赖
  • 调用API,合理配置相关属性,生成二维码
  • 根据需要对第2步的图片进行一轮裁剪(可选)
  • 将图片以字节流的方式上传至七牛云
  • 拼接二维码的访问链接URL

手动导入依赖Jar:

  • Qrcode_A.jar
  • qrcode_B.jar

生成二维码

/*** @Description 二维码工具类* @Author blake* @Date 2018/12/8 下午4:57* @Version 1.0*/
@Component
public class QrCodeUtils {private static final Logger logger = LoggerFactory.getLogger(QrCodeUtils.class);@Autowiredprivate QiniuUploadUtils qiniuUploadUtils;/*** @return java.lang.String* @throws* @description 二维码生成* @params [qrData]*/public String generateQrCodeThenUpload(String qrData) throws IOException {Qrcode x = new Qrcode();int version = 7;x.setQrcodeErrorCorrect('M');// 纠错等级x.setQrcodeEncodeMode('B');// N代表数字,A代表a-Z,B代表其它(中文等)x.setQrcodeVersion(version);// 版本号// int width=300;int width = 67 + 12 * (version - 1);// int height=300;int height = 67 + 12 * (version - 1);BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);Graphics2D gs = bufferedImage.createGraphics();gs.setBackground(Color.WHITE);gs.setColor(Color.BLACK);gs.clearRect(0, 0, width, height);int pixoff = 2;// 偏移量,如果不加有可能会导致识别不准确// 如果有汉字需要加上编码byte[] d = qrData.getBytes(StandardCharsets.UTF_8);if (d.length > 0 && d.length < 120) {boolean[][] s = x.calQrcode(d);for (int i = 0; i < s.length; i++) {for (int j = 0; j < s.length; j++) {if (s[j][i]) {gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);}}}}gs.dispose();bufferedImage.flush();ByteArrayOutputStream os = new ByteArrayOutputStream();// 生成二维码 => 图片写入字节输出流ImageIO.write(bufferedImage, "jpg", os);String domainAndKey = qiniuUploadUtils.uploadFilesViaServer(os);logger.info("QrCodeUtils.generateQrCodeThenUpload ========= 域名+Key:{} ========= ", domainAndKey);if (StringUtils.isNotBlank(domainAndKey)) {String[] dKeyArray = domainAndKey.split(",");return "http://" + dKeyArray[0] + "/" + dKeyArray[1];} else {logger.info("QrCodeUtils.generateQrCodeThenUpload ======== 二维码生成错误,请稍后重试!========");throw new CommonBusinessException("二维码生成错误,请稍后重试!");}}}

七牛云上传

/*** @Description 七牛文件上传工具类* @Author blake* @Date 2018-12-19 17:40* @Version 1.0*/
@Component
public class QiniuUploadUtils {@Value("${qiniu.cloud.access.Key}")private String accessKey;@Value("${qiniu.cloud.secret.Key}")private String secretKey;@Value("${qiniu.cloud.bucket}")private String bucket;@Value("${qiniu.cloud.domain}")private String domain;/*** @return void* @throws* @description 七牛云通过服务端上传文件(使用数据流传输)* @params [os]*/public String uploadFilesViaServer(ByteArrayOutputStream os) {String retKey = "";// 构造一个带指定Zone对象的配置类Configuration cfg = new Configuration(Zone.zone2());UploadManager uploadManager = new UploadManager(cfg);String uuid = UUID.randomUUID().toString();// 等同于文件名String key = uuid.replace("-", "") + ".jpg";Auth auth = Auth.create(accessKey, secretKey);String upToken = auth.uploadToken(bucket);// 接收字节输出流,然后转换为字节输入流InputStream byteInputStream = new ByteArrayInputStream(os.toByteArray());try {Response response = uploadManager.put(byteInputStream, key, upToken, null, null);//解析上传成功的结果DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);System.out.println(putRet.key);System.out.println(putRet.hash);retKey = putRet.key;} catch (QiniuException ex) {Response r = ex.response;System.err.println(r.toString());try {System.err.println(r.bodyString());} catch (QiniuException ex2) {//ignore}}return domain + "," + retKey;}
}

二维码生成并上传至七牛云 返回图片URL相关推荐

  1. 接口查询的数据生成excel上传到七牛云

    接口查询的数据生成excel上传到七牛云 一.注册七牛云并新建一个存储空间 我们公司已经有一个七牛云的账号,登录进去之后创建一个新的对象存储空间.命名为eval_mobile.酒会有一个默认的融合 C ...

  2. 微搭低代码实现二维码显示及上传功能

    产品历经多次迭代,一直没有提供二维码组件.在日常小程序中,二维码出示还是一个很常用的功能.官方不提供,我们也只能曲线实现了. 寻找一个开源的在线二维码网站 将生成的二维码上传到云存储中 1 二维码在线 ...

  3. 通过UEditor多图上传到七牛云出现图片不全,或上传失败bug

    在node-ueditor进行拓展,通过多图上传直接将图片保存到七牛云.在保存的时候通过busboy包进行文件流保存 bug: 发现多张图片上传时候,部分图片出现上传失败,或显示出得图片只有一半的情况 ...

  4. 如何扫码下载文件?文件转二维码生成在线的方法

    现在大多数人喜欢将文件生成二维码图片的方式来分享给他人,有效的提升了他人获取信息的速度,那么文件生成二维码该如何来操作呢?可以使用在线二维码生成器来操作,只需要通过上传文件,一键就可以在线生成二维码图 ...

  5. java实现后台直接生成二维码图片并直接上传到七牛云上面

    java实现后台直接生成二维码图片并直接上传到七牛云上面 需求:后台是直接根据唯一核销码生成图片,然后的话直接上传到七牛云,数据库只是保存地址,一开始也想错了,想成了创建临时文件存储生成的图片再上传到 ...

  6. SpringBoot 二维码生成base64并上传OSS

    SpringBoot 二维码生成base64并上传OSS 基础环境 SpringBoot.Maven 代码实现 1.添加依赖 <!--二维码生成 --> <dependency> ...

  7. java 二维码与海报合成图片并上传至七牛云

    简单的二维码与图片合成 效果如下: 准备步骤: 第一步毋庸置疑准备图片 第二步整合二维码项目依赖(这里我们使用的是google.zxing,当然市面上开源的二维码项目很多,你可自行选择) GitHub ...

  8. 最新版人脸识别小程序 图片识别 生成二维码签到 地图上选点进行位置签到 计算签到距离 课程会议活动打卡日常考勤 上课签到打卡考勤口令签到

    技术选型 1,前端 小程序原生MINA框架 css JavaScript Wxml 2,管理后台 云开发Cms内容管理系统 web网页 3,数据后台 小程序云开发 云函数 云开发数据库(基于Mongo ...

  9. 基于MCU的二维码生成及在墨水屏上进行二维码显示

    墨水屏相比其他LCD屏幕在低功耗方面有着显著优势,特别适合纽扣电池甚至是无电池的nfc价签的应用场合.价签经常要显示二维码,因此网上找了下找到了一个合适的适合在mcu上进行使用的二维码生成库. Git ...

最新文章

  1. 计算机网络技术简答题,《计算机网络技术》简答题.doc
  2. Linux shell 自启动脚本写法
  3. echarts中graphic_使用Pyecharts进行奥运会可视化分析!
  4. DropdownList绑定的两种方法
  5. python如何下载tushare_安装tushare
  6. DL之InceptionV2/V3:InceptionV2 InceptionV3算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  7. OpenCASCADE:Modeling Algorithms模块几何工具之Intersections交叉
  8. Linux memcached
  9. 信息学奥赛一本通C++语言——1020: 打印ASCII码
  10. linux一些杂项整理
  11. 在WPF中创建可换肤的用户界面
  12. MySQL获取汉字拼音首字母
  13. 简单工厂模式与策略模式
  14. c语言 字符串比较 指定长度,strncmp函数——比较特定长度的字符串详解
  15. TOC和TOB产品的区别是什么
  16. HTML——响应式布局
  17. 车牌识别的matlab程序(程序_讲解_模板),车牌识别的matlab程序(程序-讲解-模板)资料...
  18. Node.js开发入门—使用http访问外部世界
  19. tf.expand_dims用法详解
  20. 今天是星期五,上班已经三个礼拜了

热门文章

  1. 如何加快Mac启动时间?Mac启动缓慢问题如何解决?
  2. 基于可逆神经网络的图像隐藏技术 (ICCV 2021) - HiNet: Deep Image Hiding by Invertible Network
  3. 520表白网页,程序员浪漫表白,求婚倒计时网站制作 HTML+CSS+JS
  4. 国家卫生健康委办公厅关于启用全国统一电子无偿献血证的通知
  5. 计算机主板故障与维修论文,主板维护计算机硬件论文
  6. 百度百科创建词条参考资料问题汇总
  7. IT圈故事杂谈(2)婆婆的堵嘴布
  8. 如何清空php缓存数据库,ThinkPHP实现一键清除缓存方法
  9. jquery validation engine ajax验证,jQuery Validation Engine 表单验证
  10. Consignment 寄售库存