Java实现简单二维码制作

二维码概述

我们生活中使用到二维码的场景:

二维码概念

二维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白

相间的图形记录数据符号信息的图形。

在代码编制上巧妙地利用构成计算机内部逻辑基础的"0"、"1"比特流的概念,使用若干个与二进制相对应的几何

形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些

共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息

自动识别功能、及处理图形旋转变化点。

二维码发展历史图示:

一维条码

1)一维条码是由一组粗细不同、黑白(或彩色)相同的条、空机器相应的字符(数字字母)组成的标记,即传统条码。

二维条码

2)二维条码是用某种特定的几何何图形按一定规律在平面(二维方向上)分布的条、空相间的图形来记录数据符号信

息。

二维码分类

二维条码也有许多不同的码制,就码制的编码原理而言,通常分为三种类型:

1)线性堆叠式二维码

编码原理:建立在一维条码基础之上,按需要堆积成两行或多行。

2)矩阵式二维码

最为常用的类型。

编码原理:在一个矩形空间通过黑、白像素在矩阵中的不同分布进行编码。

在矩阵相应元素位置上,用点(方点、圆点或者其他形状)的出现表示二进制"1",点的不出现表示二进制的"0"

3)邮政码

编码原理:邮政码通过不同长度的条进行编码,主要用于邮件编码

如:POSTNET、BPO 4-STATE

二维码优缺点

优点:

1)高密度编码,信息容量大

2)编码范围广

3)容错能力强

4)译码可靠性高

5)可引入加密措施

6)成本低,易制作,持久耐用

缺点:

1)二维码技术成为手机病毒、钓鱼网站传播的新渠道

2)信息泄露

OR Code简介

目前流行的三大国际标准:

1)PDF417:不支持中文

2)DM:专利未公开,需支付专利费用

3)QR Code:专利公开,支持中文

QR Code比其他二维码相比,具有识读速度快,数据密度大,占用空间小的优势。QR Code是由日本Denso公

司于1994年研制的一种矩阵二维码符号码,全称是Quick Response Code。

制作QR Code二维码的三种方式:

借助jar包zxing

生成二维码的CreateQRCode.java源文件

package com.zxing;

import java.io.File;
import java.nio.file.Path;
import java.util.HashMap;

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;

/**
 * 生成二维码
 * @author Administrator
 * @date 2016年7月29日
 */
public class CreateQRCode {

	public static void main(String[] args) {

		int width = 300;//二维码图片的宽度
		int height = 300;//二维码图片的高度
		String format = "png";//二维码格式
		String content = "http://www.imooc.com";//二维码内容

		//定义二维码内容参数
		HashMap hints = new HashMap();
		//设置字符集编码格式
		hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
		//设置容错等级,在这里我们使用M级别
		hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
		//设置边框距
		hints.put(EncodeHintType.MARGIN, 2);

		//生成二维码
		try {
			//指定二维码内容
			BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height,hints);
			//指定生成图片的保存路径
			Path file = new File("D:/code/imooc.png").toPath();
			//生成二维码
			MatrixToImageWriter.writeToPath(bitMatrix, format, file);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

运行结果:

解析二维码的ReadQRCode.java源文件:

package com.zxing;

import java.awt.image.BufferedImage;
import java.io.File;
import java.util.HashMap;

import javax.imageio.ImageIO;

import com.google.zxing.BinaryBitmap;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;

public class ReadQRCode {

	public static void main(String[] args) {
		try {
			MultiFormatReader formatReader = new MultiFormatReader();
			File file = new File("D:/code/t.png");
			BufferedImage image = ImageIO.read(file);
			BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));

			//定义二维码的参数
			HashMap hints = new HashMap();
			hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
			Result result = formatReader.decode(binaryBitmap,hints);

			System.out.println("解析结果:" + result.toString());
			System.out.println("二维码格式类型:" + result.getBarcodeFormat());
			System.out.println("二维码文本内容:" + result.getText());
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

运行结果:

(2)借助jar包qrcodejar

生成二维码的CreateQRCode.java源文件:

package com.qrcode;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

import com.sun.prism.Image;
import com.swetake.util.Qrcode;

public class CreateQRCode {

	public static void main(String[] args) throws Exception {
		Qrcode x = new Qrcode();
		//N代表数字,A代表a-z,B代表其他字符
		x.setQrcodeEncodeMode(‘B‘);
		//设置纠错等级
		x.setQrcodeErrorCorrect(‘M‘);
		//设置版本号(1-40)
		x.setQrcodeVersion(7);

		String qrDate = "http://www.baidu.com";
		int width = 67+12*(7-1);
		int height = 67+12*(7-1);
		int pixoff = 2;//偏移量

		BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		Graphics2D gs = bufferedImage.createGraphics();
		gs.setBackground(Color.WHITE);
		gs.setColor(Color.BLACK);
		gs.clearRect(0, 0, width, height);

		byte[] d = qrDate.getBytes("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();
		ImageIO.write(bufferedImage, "png", new File("D:/code/baidu.png"));
	}

}

辅助类MyQRCodeImage.java源文件:

package com.qrcode;

import java.awt.image.BufferedImage;

import jp.sourceforge.qrcode.data.QRCodeImage;

public class MyQRCodeImage implements QRCodeImage {
	BufferedImage bufferedImagees;

	public MyQRCodeImage(BufferedImage bufferedImage){
		this.bufferedImagees = bufferedImage;
	}

	@Override
	public int getHeight() {
		return bufferedImagees.getHeight();
	}

	@Override
	public int getPixel(int arg0, int arg1) {
		return bufferedImagees.getRGB(arg0, arg1);
	}

	@Override
	public int getWidth() {
		return bufferedImagees.getWidth();
	}

}

运行结果:

解析二维码的ReadQRCode.java源文件:

package com.qrcode;

import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

import jp.sourceforge.qrcode.QRCodeDecoder;

public class ReadQRCode {
	public static void main(String[] args) throws Exception {

		File file = new File("D:/code/baidu.png");

		BufferedImage bufferedImage = ImageIO.read(file);

		QRCodeDecoder codeDecoder = new QRCodeDecoder();
		codeDecoder.decode(new MyQRCodeImage(bufferedImage));

		String result = new String(codeDecoder.decode(new  MyQRCodeImage(bufferedImage)), "UTF-8");
		System.out.println("解析二维码的内容:" + result);

	}

}

运行结果:

借助jquert.qrcode.js

index.jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>二维码制作</title>
<script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery.min.js"></script>
<script type="text/javascript" src="<%=request.getContextPath() %>/js/jquery.qrcode.min.js"></script>
</head>
<body>
       <h1>生成二维码如下:</h1>
       <hr/>
       <div id="qrcode"></div>
       
       <script type="text/javascript" >
            jQuery(‘#qrcode‘).qrcode("http://www.qq.com");
       </script>
</body>
</html>

运行结果:

使用上面解析的结果是:

时间: 2024-07-29 23:33:51

Java实现简单二维码制作的相关文章

专业二维码制作工具

QRCreater是一款简单易用的二维码生成工具,它可以非常方便的将需要的内容编码成流行的二维码,供移动设备扫描识别.相比其他类似工具,我们的产品突出强大功能同时所具有的易用性,您只需简单的设定,便可以创建出专业的,可供解码阅读的二维码. 主要特点: 1.简单易用:没有复杂的参数设定,也没有晦涩难懂的专业术语,只需要调整几个易懂的选项,便可以随心生成需要的二维码!甚至于如果您没有特别的要求,仅凭软件默认的参数设定就能够完成二维码的创建,而您所要做的,仅仅是写下需要编码的文字内容即可,好用不止一点

java实现生成二维码

                                                     java实现生成二维码 二维码vs条形码 最大的区别就是:二维码具有容错功能,当二维码图片被遮挡一部分后,仍可以扫描出来.容错的原理是二维码在编码过程中进行了冗余,就像是123被编码成123123,这样只要扫描到一部分二维码图片,二维码内容还是可以被全部读到. 二维码容错率即是指二维码图标被遮挡多少后,仍可以被扫描出来的能力.容错率越高,则二维码图片能被遮挡的部分越多. 二维码容错率用字母表

JAVA中生成二维码图片的方法

JAVA中生成二维码的方法并不复杂,使用google的zxing包就可以实现.下面的方法包含了生成二维码.在中间附加logo.添加文字功能. 一.下载zxing的架包,并导入项目中,如下: 最主要的包都在com.google.zxing.core下.如果是maven项目,maven依赖如下: 1 <dependency> 2 <groupId>com.google.zxing</groupId> 3 <artifactId>core</artifact

JAVA实战教程_JAVA案例开发之JAVA开发微信二维码大数据开发03

大家好,这次是第三个课时的视频,欢迎大家继续学习. 视频简介:本视频是关于JAVA实战教程,JAVA开发微信二维码大数据系统.这个JAVA开发案例可以协助一些从零基础开始学习JAVA,正处于理论走完实践的路程上的初学者能接触到实际开发项目过程中,在实践当中巩固自己的JAVA方面的知识外,更能在项目案例当中学到解决在JAVA学习或者实践当中遇上问题的一些解决方式.仅供参考!自设交流群:457036818,欢迎一起加入交流. PS:该案例共十个课时,本小节为第二课时 课程原地址:http://www

JAVA实战教程_JAVA案例开发之JAVA开发微信二维码大数据系统02

hello,上一次我们上传了第一个课时的视频,现在当然是上传第二个视频咯. 视频简介:本视频是关于JAVA实战教程,JAVA开发微信二维码大数据系统.这个JAVA开发案例可以协助一些从零基础开始学习JAVA,正处于理论走完实践的路程上的初学者能接触到实际开发项目过程中,在实践当中巩固自己的JAVA方面的知识外,更能在项目案例当中学到解决在JAVA学习或者实践当中遇上问题的一些解决方式.仅供参考!自设交流群:457036818,欢迎一起加入交流. PS:该案例共十个课时,本小节为第二课时 课程原地

java代码解析二维码

java代码解析二维码一般步骤 本文采用的是google的zxing技术进行解析二维码技术,解析二维码的一般步骤如下: 一.下载zxing-core的jar包: 二.创建一个BufferedImageLuminanceSource类继承LuminanceSource,此类在google的源码中有,但是为了使用方便,下面有此类的源码,可以直接复制使用: private final BufferedImage image; private final int left; private final

java做的二维码客户端

原文:java做的二维码客户端 源代码下载地址:http://www.zuidaima.com/share/1550463611882496.htm 暂时不支持中文,我以前没发现

支付宝转账银行卡收款二维码制作教程

一次偶然的机会,发现支付宝支持扫码,自动填写银行卡二维码,所以就做了这个支付宝转账银行卡收款二维码制作工具 制作网址 https://www.hotapp.cn/wap/zhimabank 做的二维码扫码后就是这样的 原文地址:https://www.cnblogs.com/likwo/p/10307099.html

简单二维码的制作

1.这里介绍三种二维码的制作方法 现在有很多二维码的软件所有这篇博客是给大家了解一下它的一些原理: 第一种的制作需要在官网上下载zxing的一个源码文件,这个可以直接在百度可以下载的 下载好了 第一步需要的是把zxing-zxing-3.3.3//core/src//main//java//com和zxing-zxing-3.3.3//javase//src//main//java//com这两个文件复制到新建的项目中,放入到项目中这时系统会报错,这个错误我们先不管它.直接把这个项目给导出,选择