`

二维码学习(二):使用ZXing生成与解析二维码

阅读更多

生成二维码主要有三种技术:ZXing,qrcode和jQuery.qrcode。这里使用ZXing生成二维码。直接上代码吧:

package com.wjl.test;

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

import javax.imageio.ImageIO;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.DecodeHintType;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.Result;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.tzj.tsp.qrcode.BufferedImageLuminanceSource;
import com.tzj.tsp.qrcode.MatrixToImageWriter;

public class CreateQRCodeInZXing {

	/**
	 * 该类用来生成二维码
	 */
	public static void main(String[] args) {
		//1、定义二维码的大小、图片后缀名和内容
		int width = 300;
		int height = 300;
		
		//png比jpg的两个优点:1、png支持透明 2、png较小
		String format = "png";
		String contents = "使用ZXing生成二维码";
		System.out.println("生成二维码内容:"+contents);
		
		//2、定义二维码文件
		String filePath = "D:"+File.separator+"temp"+File.separator+"ZXing"+System.currentTimeMillis()+"."+format;
		File QRFile = new File(filePath);
		
		//3、生成二维码
		CreateQRCodeInZXing zXing = new CreateQRCodeInZXing();
		boolean flag = zXing.createQRCode(contents,width,height,QRFile);
		if(flag){//说明生成二维码成功
			//4、添加logo
			String logoPath = "D:"+File.separator+"temp"+File.separator+"logo.jpg";
			File logoFile = new File(logoPath);
			int resu = zXing.addLogoQRCode(QRFile, logoFile, format,2);
			if(resu==3){//添加logo成功
				//5、解析二维码
				String result = zXing.readQRCode(QRFile);
				System.out.println("解析二维码内容:"+result);
			}
		}
	}
	
	/**
	 * 该方法用来生成二维码
	 * @param contents:二维码内容
	 * @param width:二维码宽度
	 * @param height:二维码高度
	 * @param format:二维码图片后缀名
	 * @param QRFile:二维码图片文件
	 * @return boolean:true-生成成功 false-生成失败
	 * */
	public boolean createQRCode(String contents,int width,int height,File QRFile){
		boolean result = false;
		try{
			//生成矩阵  
			BitMatrix bitMatrix = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height,getEncodeHints());
			MatrixToImageWriter.writeToFile(bitMatrix,QRFile);
			result = true;
		}catch(Exception e){
			e.printStackTrace();
		}
		return result;
	}
	
	/**
	 * 该方法用来读取二维码内容
	 * @param QRFile:二维码图片文件
	 * @return String:二维码内容 
	 * **/
	public String readQRCode(File QRFile){
		if(!QRFile.exists() || !QRFile.isFile()) return "";
		String result="";
		try{
			MultiFormatReader formatReader = new MultiFormatReader();
			//读取文件并识别成图片
			BufferedImage image = ImageIO.read(QRFile);
			BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(new BufferedImageLuminanceSource(image)));
			Result result2 = formatReader.decode(binaryBitmap,getDecodeHints());
			result = result2.getText();
		}catch(Exception e){
			e.printStackTrace();
		}
		return result;
	}
	
	
	/**
	 * 给二维码图片添加Logo
	 * @param QRFile:二维码图片文件
	 * @param logoFile:logo文件对象
	 * @param format:添加logo后的二维码文件后缀名
	 * @param logoConfig:logo设置
	 * @param postion:1-右下角 非1-中间
	 * @return int:1-找不到二维码文件或logo文件 2-生成成抛出异常 3-生成成功
	 */
	public int addLogoQRCode(File QRFile,File logoFile,String format,int position) {
		int result = 3;
		try {
			//二维码文件或logo文件不存在或不是文件
			if (!QRFile.exists() || !QRFile.isFile() || !logoFile.exists() || !logoFile.isFile()) {
				return 1;
			}
			
			//读取二维码图片,并构建绘图对象
			BufferedImage image = ImageIO.read(QRFile);
			Graphics2D g = image.createGraphics();

			//读取Logo图片
			BufferedImage logo = ImageIO.read(logoFile);
			//设置logo的大小,此处设置为二维码图片的20%,因为过大会盖掉二维码
			int widthLogo = logo.getWidth(null) > image.getWidth() * 2 / 10 ? (image
					.getWidth() * 2 / 10) : logo.getWidth(null), heightLogo = logo
					.getHeight(null) > image.getHeight() * 2 / 10 ? (image
					.getHeight() * 2 / 10) : logo.getWidth(null);

			// 计算图片放置位置
			int x=0,y=0;
			if(position==1){//logo放在右下角
				x = (image.getWidth() - widthLogo);
				y = (image.getHeight() - heightLogo);
			}else{//logo放在中心
				x = (image.getWidth() - widthLogo) / 2; 
				y =(image.getHeight() - heightLogo) / 2;
			}
			
			// 开始绘制图片
			g.drawImage(logo, x, y, widthLogo, heightLogo, null);
			g.drawRoundRect(x, y, widthLogo, heightLogo, 15, 15);
			g.setStroke(new BasicStroke(2));
			g.drawRect(x, y, widthLogo, heightLogo);

			g.dispose();
			logo.flush();
			image.flush();

			ImageIO.write(image,format,QRFile);
		} catch (Exception e) {
			result = 2;
			e.printStackTrace();
		}
		return result;
	}
	
	/**
	 * 该方法用来生成二维码时设置二维码的编码、纠错等级等参数
	 * */
	public HashMap getEncodeHints(){
		HashMap hints = new HashMap();
		hints.put(EncodeHintType.CHARACTER_SET,"UTF-8");//设置编码
		//二维码的容错等级(纠错能力)分四种:
		//L:约可纠错7%的数据 M:约可纠错15%的数据  Q:约可纠错25%的数据  H:约可纠错30%的数据 
		hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);//设置容错等级(纠错能力)
		hints.put(EncodeHintType.MARGIN,2);//边距(即二维码结构图中的空白区)
		return hints;
	}
	
	/**
	 * 该方法用来解析二维码时设置二维码的编码等参数
	 * */
	public HashMap getDecodeHints(){
		HashMap hints = new HashMap();
		hints.put(DecodeHintType.CHARACTER_SET,"UTF-8");//设置编码
		return hints;
	}
}

需要的jar包:core-2.2.jar

分享到:
评论

相关推荐

    Google二维码生成(解析)zxing库Android

    Google二维码生成解析zxing库 Android 代码,可以实现二维码生成,亲测可用。 代码为2016年6月9日从GitHub下载的,版本为3.2.1 GitHub对应地址代码为: https://github.com/zxing/zxing jar包原始下载地址为:...

    zxing 二维码 调用实例,解决低版本 白边问题

    2. **生成二维码**:使用ZXing生成二维码的代码示例如下: ```java import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import ...

    zxing生成、解析二维码

    在本文中,我们将深入探讨如何使用ZXing来生成和解析二维码,以及如何利用QRcode.java类创建二维码名片。 1. **生成二维码** - **ZXing API介绍**:ZXing提供了Java API,可以方便地集成到各种项目中。主要的类有`...

    Zxing二维码生成与解析

    1. 使用Zxing生成二维码 在Java环境中,我们可以使用Zxing的`MultiFormatWriter`和`BitMatrix`类来生成二维码。首先,我们需要将要编码的数据转换为字节数组,然后调用`MultiFormatWriter.encode()`方法生成`...

    通过谷歌zxing 生成\解析 二维码

    在使用ZXing生成和解析二维码时,我们需要了解以下几个关键概念和技术: 1. **生成二维码**: - **MatrixToImageWriter**: 这是ZXing库中的一个类,用于将二维码的数据矩阵(一个二维的布尔值数组)转换为图像文件...

    利用ZXING生成简易二维码

    在标题“利用ZXING生成简易二维码”中,提到的核心知识点是使用ZXing库来创建二维码。ZXing库提供了Java、Android以及命令行工具等多种方式来操作二维码。生成二维码的基本步骤包括: 1. **配置ZXing**: 首先,你...

    使用zxing开发的二维码/条形码/带logo彩色二维码例子

    Google开源的ZXing(Zebra Crossing)库为开发者提供了跨平台的二维码和条形码生成与解码能力。本项目以ZXing为基础,结合自定义功能,如生成带有Logo的彩色二维码,为开发人员提供了更丰富的应用场景。 ZXing(又...

    java使用zxing生成和解析二维码例子

    本教程将详细介绍如何在Java中使用ZXing库来生成和解析二维码。 首先,我们需要了解ZXing库的基本结构。ZXing(又称“条形码彩虹”)包含了多个模块,如Core核心模块,用于处理各种编码格式的低级操作;JavaME模块...

    Zxing生成与解析二维码

    在Java中使用Zxing生成二维码,首先需要将Zxing库添加到项目依赖中。如果你使用Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>com.google.zxing</groupId> <artifactId>core <version>3.4.1 ...

    Java二维码解析和生成库zxing

    Java二维码解析和生成库ZXing,全称"Zebra Crossing",是一款强大的开源项目,用于处理一维和二维条形码。ZXing提供了一系列API,让开发者能够方便地在Java应用中实现条形码的读取和生成。该库不仅支持常见的QR码,...

    使用zxing加密解析二维码

    在“使用ZXing加密解析二维码”这一主题中,我们将深入探讨如何利用ZXing库实现二维码的加密和解码过程。首先,我们需要理解二维码的基本结构。二维码是一种二维条形码,可以存储更多的数据,包括文本、网址、联系...

    google.zxing二维码带logo生成工具

    3. **解析二维码**:除了生成,`google.zxing`还具备读取二维码的能力。它支持多种条码格式,包括QR码。通过扫描二维码图像,ZXing库可以解析出其中包含的信息,供应用程序使用。 在使用`Google.zxing二维码生成...

    ZXing生成二维码包

    在本案例中,我们主要关注的是ZXing在生成和解析二维码方面的应用。 **1. 二维码生成** 生成二维码是ZXing库的核心功能之一。二维码可以存储大量的文本信息,如网址、联系信息、文本字符串等。在Java环境中,我们...

    Zxing生成的AES加密二维码

    这个“Zxing生成的AES加密二维码”示例展示了如何结合这两者,即使用强大的AES(Advanced Encryption Standard)加密技术和Zxing(ZXing,意为“条形码零知识”)二维码库来确保数据的安全传输。下面我们将深入探讨...

    JAVA 二维码生成 自己封装ZXing2.2.jar

    在本项目中,开发者已经对ZXing 2.2版本进行了封装,简化了使用流程,使得在Java项目中生成和解析二维码变得更加方便。 首先,我们要理解ZXing库的核心功能。ZXing提供了多种类和方法,用于二维码的生成和解码。在...

    JAVA生成Zxing二维码

    在Java环境中,使用Zxing库可以方便地创建和解析二维码。以下将详细介绍如何使用Java和Zxing实现二维码的生成与读取。 1. **安装Zxing库** 首先,你需要在项目中引入Zxing库。如果你使用的是Maven,可以在`pom.xml...

    com.google.zxing 二维码生成与解析

    3. **二维码解析**:ZXing库也包含了解析二维码的功能。使用`com.google.zxing.QRCodeReader`类,可以读取并解码二维码中的数据。它能自动处理图像预处理,如灰度化、二值化,以提高识别率。 4. **核心组件**:`...

    Android zxing二维码扫描 从相册选择二维码识别

    这个项目不仅支持生成二维码和条形码,还支持扫描和解析这些编码,使得开发者能够轻松地在应用中集成二维码功能。在"Android zxing二维码扫描 从相册选择二维码识别"这个主题中,我们将深入探讨如何利用ZXing库实现...

    zxing3.3.1二维码生成

    以下是使用ZXing生成二维码的基本步骤: 1. 引入ZXing库:将`zxing3.3.1.jar`添加到项目的类路径中,如果是Java项目,可以将其放入`lib`目录下,或者在Maven/Gradle构建工具中配置依赖。 2. 创建BitMatrix对象:这...

    android二维码开发 ZXing(中文乱码已处理)

    在Android平台上进行二维码开发时,ZXing(Zebra Crossing)是一个非常流行的开源库,它提供了多种条码和二维码的读取与生成功能。本项目针对ZXing进行了优化,特别是解决了中文乱码的问题,使得开发者在处理包含...

Global site tag (gtag.js) - Google Analytics