文档章节

使用 zxing-core-3.2.0.jar 和 zxing-javase-3.2.0.jar 将字符串转化为二维码图片并输出

苗哥
 苗哥
发布于 2016/10/19 11:20
字数 528
阅读 572
收藏 3

最近做项目,有個需求是把已知的字符串转化为二维码图片,然后使用BASE64将二维码图片编码并输出。于是在网上找了下相关资料,自己在本地写了個简单例子演示了下。代码需要两個JAR包来完成编译:zxing-core-3.2.0.jar 和 zxing-javase-3.2.0.jar。如果从官方网站上下载需要梯子,为了平时使用方便我直接上传到了百度云盘,地址是:http://pan.baidu.com/s/1jHKmBQm

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.text.SimpleDateFormat;
import java.util.Hashtable;

import org.apache.commons.codec.binary.Base64;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

//根据给定字符串生成对应的二维码图片,并将图片转化成BASE64编码输出
public class QRCode {
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static void main(String[] args)throws Exception{
		String text = "weixin://wxpay/bizpayurl?pr=hvuxzwN";
        int width = 300;   
        int height = 300;   
        String format = "jpg";
        //设置默认编码格式和容错率
        Hashtable hints = new Hashtable();
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
		hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
		//设置二维码图片的存放目录、文件名以及图片格式
		String filePath = "D:\\000000\\";
		String fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new java.util.Date()) + ".jpg";
		Path path = FileSystems.getDefault().getPath(filePath, fileName);
		//开始生成二维码图片
		BitMatrix matrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE, width, height, hints);
        //把生成的图片保存到指定目录
		MatrixToImageWriter.writeToPath(matrix, format, path);
        System.out.println("path=" + path.toString());
        //转化成BASE64编码并输出
        File file = new File(path.toString());
        InputStream input = new FileInputStream(file);
        String result = new QRCode().convert2Byte(input);
        System.out.println("result=" + result);
        //最后删除该图片文件
        file.delete();
    }
	
	private String convert2Byte(InputStream input) throws IOException {
		ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
		byte[] buff = new byte[100];
		int rc = 0;
		while ((rc = input.read(buff, 0, 100)) > 0) {
			swapStream.write(buff, 0, rc);
		}
		byte[] in2b = swapStream.toByteArray();
		swapStream.flush();
		swapStream.close();
		input.close();
		return new String(Base64.encodeBase64(in2b, true));
	}
}

运行了下,生成的二维码图片如下所示,我在代码中的逻辑是,生成二维码图片存放在临时目录,生成BASE64编码之后就把图片删除,这样可以减少占用的服务器资源。

生成的二维码图片

转化出的BASE64编码就不贴出来了,太长也没什么参考价值,大家自己运行代码就能看到。

© 著作权归作者所有

苗哥

苗哥

粉丝 245
博文 110
码字总数 130745
作品 0
上海
后端工程师
私信 提问
Android平台利用ZXING生成二维码图片

zxing是google的一个开源二维码项目,目前基本上和二维码打交道的东西,都会用到它. 最近项目中用到了android手机需要根据提供的字符串生成二维码图片,之前用zxing做过二维码解码,编码还没做过...

xiahuawuyu
2012/04/25
3.4K
0
基于zxing-lib三步实现Android二维码应用

只需要基于开源项目zxing-lib,便可轻松创建独立二维码App,也可将二维码功能集成进App内。本文也是zxing-lib的使用文档。同时抛砖引玉,欢迎大家一起共建zxing-lib。 项目地址:https://git...

yuminw
2014/08/23
2.4K
8
Java js 生成二维码 解析二维码

1.二维码分类   二维条码也有许多不同的码制,就码制的编码原理而言,通常分为三种类型。 线性堆叠式二维码 编码原理: 建立在一维条码基础之上,按需要堆积成两行或多行。 图示: 2. 矩阵...

haoyuehong
2018/06/28
143
0
用com.google.zxing生成、解析二维码

在http://code.google.com/p/zxing/downloads/list下载zxing压缩包(我用的Zxing-1.5),解压后将core/src和javase/src中的com文件夹整体复制到你的java工程中,这两个包里面包含java所用的j...

惠风康桥
2012/10/18
5.3K
3
zxing 如何识别反转二维码

说起二维码扫描,估计很多人用的是 zxing 吧。 然而 zxing 虽然好用,但是却有一些坑。 这边分析一下自己实际项目遇到的一个坑。 什么坑呢? 下面举个栗子你就懂了。 这边生成二维码使用的是...

AndroidTraveler
2018/07/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JS实现使用Math.random()函数生成n到m间的随机数字

Math.random()函数返回0和1之间的伪随机数,可能为0,但总是小于1,[0,1) 生成n-m,包含n但不包含m的整数: 第一步算出 m-n的值,假设等于w 第二步Math.random()*w 第三步Math.random()*w+n...

张兴华ZHero
17分钟前
3
0
入门了解Service Mesh + Istio?从本文开始

下周六,深圳,阔别已久的线下技术沙龙要和你见面啦! 现场有Rancher Labs研发经理demo刚刚发布的Rancher 2.3中的Istio、Windows容器、集群模板等功能及使用,还有k3s首次线下workshop,由R...

RancherLabs
18分钟前
3
0
Gradle 发布 Jar 到 Archiva 时提示不能 Overwriting released artifacts is not allowed

系统提示错误信息: Received status code 409 from server: Overwriting released artifacts is not allowed. 这是在 Archiva 默认的配置下如果你不是使用 snapshot 配置的话,是不允许对仓...

honeymoose
19分钟前
3
0
二维码插件之qrcode.min.js

文件链接百度云地址 https://pan.baidu.com/s/1nWiBuT4Z7WOAMoUEFL8PZg 入门 http://www.jq22.com/jquery-info294 使用jquery.qrcode.min.js实现前台二维码生成(带Logo) https://blog.csd......

木九天
29分钟前
3
0
开源 java CMS - FreeCMS2.8 自定义标签 commentPage

项目地址:http://www.freeteam.cn/ commentPage 根据参数提取评论对象。 参数 说明 siteid 站点id objtype 评论对象类型 objid 评论对象id membername 会员名称 isanonymous 是否匿名 1是 ...

freeteam
30分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部