思路


现阶段遇到这样一个问题,在原有的产品上加入线下优惠券模式,用户领取优惠券以后,获取到一个唯一的ID作为领取凭证,但是在线下用扫码枪进行扫码的时候,总不能让人手动输入吧

于是乎就想出了一个办法,后端提供一个接口,前端请求发起后,将需要加入的字符生成出二维码,然后用Base64进行编码后返回,前台直接展示即可

本地写入二维码就采用字节流的方式,将二维码直接写入到磁盘即可。

Maven依赖


        <dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.0</version>
</dependency>

这里依赖的jar包主要是Google 的zxing 进行二维码的生成

代码


        QRCodeWriter qrCodeWriter = new QRCodeWriter();
BitMatrix bitMatrix = qrCodeWriter.encode("622921", BarcodeFormat.QR_CODE, 600, 600); ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(bitMatrix, "PNG", outputStream); Base64.Encoder encoder = Base64.getEncoder(); String text = encoder.encodeToString(outputStream.toByteArray()); System.out.println(text);

说明:需要在二维码里面展现的内容就是字符串622921

参数600*600 表示的就是生成后二维码的宽高,单位px 像素

这里我们使用的是Java自带Base64工具类进行生成的base64编码

生成后的base64如下所示

iVBORw0KGgoAAAANSUhEUgAAAlgAAAJYAQAAAACWHaVxAAABkUlEQVR42u3czYrDIBQGUKEP5qv7YAWHtszUX8i0WWg4LgI2erZy+90Y8nkjsFgsFovFYrFYLBaLxWKxWCwWi8VisVgnWCk04/b49R5CfDye0/ESFovFYm1mlW9e0+fm+AInS1gsFou1o5X+zoTSer/tl7BYLBbrAta7VojzJSwWi8Xa3nqvPuMcYrFYLNYyVkf/HiCDzSwWi8Xa1OqD3dQ+vsiRWSwWi7WGNRppsu+TPlEWi8VirWF1fT2hbOss6SoUZrFYLNZmVpnz3scdnWmgslgsFms7K9d//oeuwyf+q+5gsVgs1qJWUyb09UN3xrBYLBZrRyuPP9bK9bTp/2GxWCzWjtaodCjLhCYaYLFYLNZ+1ri3s2JiexUbi8VisXa0buNUIBbRQBUSzLMAFovFYi1uje7iCXU0EOp1LBaLxbqANc1+A4vFYrGuZI2u4UmHsgAWi8ViLW0diH3Toe9+WSwWi7WuNbl7Lc8uaMgsFovF2tD6drBYLBaLxWKxWCwWi8VisVgsFovFYrFYn44fIpoMJJGu/X0AAAAASUVORK5CYII=

注意:这里编码后的base64字符串没有带有前端img标签解析时候的格式字符,需要在字符串前拼接:data:image/png;base64,

方可正常显示!!

检验


在线验证:http://imgbase64.duoshitong.com/

效果:微信扫码后结果就是:622921

本地生成方案


只需要修改部分关键代码即可实现,通过字节流的方式进行写入到磁盘,这里使用字节流直接操作的是文件对象,可以不用关闭流。

        File file = new File("H:/test/456.png");

        if (!file.exists()) {
file.createNewFile();
}
FileOutputStream outputStream = new FileOutputStream(file); MatrixToImageWriter.writeToStream(bitMatrix, "PNG", outputStream);

小结


学的东西要善于总结,这样才容易记忆与回顾,简单的一个生成二维码的方式,希望帮到你们!

Java 生成在线二维码 以Base64返回前端、或者写入到本地磁盘的更多相关文章

  1. Java生成艺术二维码也可以很简单

    原文点击: Quick-Media Java生成艺术二维码也可以很简单 现在二维码可以说非常常见了,当然我们见得多的一般是白底黑块,有的再中间加一个 logo,或者将二维码嵌在一张特定的背景中(比如微 ...

  2. Java生成微信二维码及logo二维码

    依赖jar包 二维码的实现有多种方法,比如 Google 的 zxing 和日本公司的 QrCode,本文以 QrCode 为例. QrCode.jar:https://pan.baidu.com/s ...

  3. java生成/解析二维码

    package a; import java.awt.BasicStroke; import java.awt.Graphics; import java.awt.Graphics2D; import ...

  4. JAVA生成解析二维码

    package com.mohe.twocode; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.B ...

  5. java 生成/解读 二维码

    package com.rails.util; import com.swetake.util.Qrcode; import jp.sourceforge.qrcode.QRCodeDecoder; ...

  6. Java生成条码二维码

    一.概述 可用barcode4j或zxing等第三方库,推荐zxing. barcode4j资料链接:http://barcode4j.sourceforge.net/ zxing资料链接:https ...

  7. 使用zxing生成解析二维码

    1. 前言 随着移动互联网的发展,我们经常在火车票.汽车票.快餐店.电影院.团购网站以及移动支付等各个场景下见到二维码的应用,可见二维码以经渗透到人们生活的各个方面.条码.二维码以及RFID被人们应用 ...

  8. 分享几个在线生成网址二维码的API接口

    现在很多大网站都有这样的一个功能,使用手机扫描一下网页上的二维码便可快速在手机上访问网站.想要实现这样的功能其实很简单,下面麦布分享几个在线生成网址二维码的API接口.都是采用http协议接口,无需下 ...

  9. 推荐六个在线生成网址二维码的API接口

    现在很多大网站都有这样的一个功能,使用手机扫描一下网页上的二维码便可快速在手机上访问网站.想要实现这样的功能其实很简单,下面麦布分享几个在线生成网址二维码的API接口.都是采用http协议接口,无需下 ...

随机推荐

  1. Flask基础(09)-->请求勾子函数

    什么是请求勾子? 为了让每个视图函数避免编写重复的功能代码,flask提供了通用设施的功能,就是所谓的勾子 那么请求勾子就是,在浏览器请求服务器资源的前后挂载相关的处理函数 请求勾子有什么作用? 作用 ...

  2. CSS div仿table样式

    要想让div元素显示的样式与table相同,那么需要使用display属性,这个属性将告诉浏览器这些数据是制表的,将以哪种样式来渲染数据: // table --使该元素按table样式渲染 // t ...

  3. python爬虫添加请求头和请求主体

    添加头部信息有两种方法 1.通过添加urllib.request.Request中的headers参数 #先把要用到的信息放到一个字典中 headers = {} headers['User-Agen ...

  4. ELK日志分析系统(3)-logstash数据处理

    1. 概述 logspout收集数据以后,就会把数据发送给logstash进行处理,本文主要讲解logstash的input, filter, output处理 2. input 数据的输入处理 支持 ...

  5. SpannableString与SpannableStringBuilder

    一.概述 1.SpannableString.SpannableStringBuilder与String的关系 首先SpannableString.SpannableStringBuilder基本上与 ...

  6. wampserver 运行橙色,80端口没有被占用,查看错误日志方法

    wampserver运行时橙色,经检查80端口并没有被占用,试了很多种方法都无效,去查看错误日志吧 1.以管理员身份打开CMD 注意这里必须是管理员身份的CMD ,powershell不行的 进入wa ...

  7. c语言中double类型数据的输入和输出

    double a;scanf("%f",&a);   //应用scanf("%lf",&a);执行上面语句时,发现double类型的输入不能使用 ...

  8. AWVS安全渗透扫描

    1.打开软件,点击New Scan 2.在website url中输入被扫描的网址,点击next 3.在scanning profile中选择测试的漏洞类型,默认选择default(默认) 在scan ...

  9. App上下左右滑动封装

    #coding=utf-8 from appium import webdriver from time import sleep caps = { "platformName": ...

  10. c++::Mysql::ORM 开发环境搭建

    官网地址:https://www.codesynthesis.com/products/odb/ 环境搭建:ubuntu16.04-64 1.安装mysqlClient sudo apt-get in ...