Java 生成在线二维码 以Base64返回前端、或者写入到本地磁盘
思路
现阶段遇到这样一个问题,在原有的产品上加入线下优惠券模式,用户领取优惠券以后,获取到一个唯一的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返回前端、或者写入到本地磁盘的更多相关文章
- Java生成艺术二维码也可以很简单
原文点击: Quick-Media Java生成艺术二维码也可以很简单 现在二维码可以说非常常见了,当然我们见得多的一般是白底黑块,有的再中间加一个 logo,或者将二维码嵌在一张特定的背景中(比如微 ...
- Java生成微信二维码及logo二维码
依赖jar包 二维码的实现有多种方法,比如 Google 的 zxing 和日本公司的 QrCode,本文以 QrCode 为例. QrCode.jar:https://pan.baidu.com/s ...
- java生成/解析二维码
package a; import java.awt.BasicStroke; import java.awt.Graphics; import java.awt.Graphics2D; import ...
- JAVA生成解析二维码
package com.mohe.twocode; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.B ...
- java 生成/解读 二维码
package com.rails.util; import com.swetake.util.Qrcode; import jp.sourceforge.qrcode.QRCodeDecoder; ...
- Java生成条码二维码
一.概述 可用barcode4j或zxing等第三方库,推荐zxing. barcode4j资料链接:http://barcode4j.sourceforge.net/ zxing资料链接:https ...
- 使用zxing生成解析二维码
1. 前言 随着移动互联网的发展,我们经常在火车票.汽车票.快餐店.电影院.团购网站以及移动支付等各个场景下见到二维码的应用,可见二维码以经渗透到人们生活的各个方面.条码.二维码以及RFID被人们应用 ...
- 分享几个在线生成网址二维码的API接口
现在很多大网站都有这样的一个功能,使用手机扫描一下网页上的二维码便可快速在手机上访问网站.想要实现这样的功能其实很简单,下面麦布分享几个在线生成网址二维码的API接口.都是采用http协议接口,无需下 ...
- 推荐六个在线生成网址二维码的API接口
现在很多大网站都有这样的一个功能,使用手机扫描一下网页上的二维码便可快速在手机上访问网站.想要实现这样的功能其实很简单,下面麦布分享几个在线生成网址二维码的API接口.都是采用http协议接口,无需下 ...
随机推荐
- 使用.NET Core创建Windows服务(二) - 使用Topshelf方式
原文:Creating Windows Services In .NET Core – Part 2 – The "Topshelf" Way 作者:Dotnet Core Tut ...
- JS调用activeX实现浏览本地文件夹功能 wekit内核只需要<input type="file" id="files" name="files[]" webkitdirectory/>即可,IE内核比较麻烦
研究了一天,js访问本地文件本身是不可能的,只能借助于插件.植入正题,IE仅支持ActiveX插件. function openDialog() { try { var Message = " ...
- python pytesseracct WinError2
接上一个3步图像识别,本来已经在两台电脑同样的操作3步都可以识别出验证码,但是今天在新电脑同样的步骤却出现了winerror2,泪崩. 一样的配方,不一样的结果. 后来发现是调用不到tesseract ...
- Spark 学习笔记之 distinct/groupByKey/reduceByKey
distinct/groupByKey/reduceByKey: distinct: import org.apache.spark.SparkContext import org.apache.sp ...
- ASP.NET Web API 2系列(一):初识Web API及手动搭建基本框架
1.导言 随着Web技术的发展,现在各种框架,前端的,后端的,数不胜数.全栈工程师的压力越来越大. PC端,pad端,移动端App(安卓/IOS)的发展,使得前后端一体的开发模式十分笨重.因此,前后端 ...
- day 20
目录 一.继承初体验 二.寻找继承关系 三.继承背景下对象属性查找顺序 四.派生 五.子类派生出新的属性,并重复父类的属性 六.新式类与经典类(了解) 一.继承初体验 父类: class Parent ...
- mvvm的初步思想
1.Object.defineProperty(obj,key,desc); 用法:1.给对象新增属性和特性 2.修改对象属性值和特性 desc(属性特性): 1.enumerable:boolean ...
- CSS样式手册
字体属性:(font) 大小 {font-size: x-large;}(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以,单位:PX.PD 样式 {font-style: obl ...
- 利用golang优雅的实现单实例
平时编写代码过程中,经常会遇到对于全局角度只需运行一次的代码,比如全局初始化操作,设计模式中的单例模式.针对单例模式,java中又出现了饿汉模式.懒汉模式,再配合synchronized同步关键字来实 ...
- Spring5源码解析6-ConfigurationClassParser 解析配置类
ConfigurationClassParser 在ConfigurationClassPostProcessor#processConfigBeanDefinitions方法中创建了Configur ...