`
guohf
  • 浏览: 419107 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java二维码生成与解析代码实现

    博客分类:
  • java
阅读更多

TwoDimensionCode类:二维码操作核心类

package qrcode;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.imageio.ImageIO;

import jp.sourceforge.qrcode.QRCodeDecoder;
import jp.sourceforge.qrcode.exception.DecodingFailedException;

import com.swetake.util.Qrcode;

public class TwoDimensionCode {
	
	/**
	 * 生成二维码(QRCode)图片
	 * @param content 存储内容
	 * @param imgPath 图片路径
	 */
	public void encoderQRCode(String content, String imgPath) {
		this.encoderQRCode(content, imgPath, "png", 7);
	}
	
	/**
	 * 生成二维码(QRCode)图片
	 * @param content 存储内容
	 * @param output 输出流
	 */
	public void encoderQRCode(String content, OutputStream output) {
		this.encoderQRCode(content, output, "png", 7);
	}
	
	/**
	 * 生成二维码(QRCode)图片
	 * @param content 存储内容
	 * @param imgPath 图片路径
	 * @param imgType 图片类型
	 */
	public void encoderQRCode(String content, String imgPath, String imgType) {
		this.encoderQRCode(content, imgPath, imgType, 7);
	}
	
	/**
	 * 生成二维码(QRCode)图片
	 * @param content 存储内容
	 * @param output 输出流
	 * @param imgType 图片类型
	 */
	public void encoderQRCode(String content, OutputStream output, String imgType) {
		this.encoderQRCode(content, output, imgType, 7);
	}

	/**
	 * 生成二维码(QRCode)图片
	 * @param content 存储内容
	 * @param imgPath 图片路径
	 * @param imgType 图片类型
	 * @param size 二维码尺寸
	 */
	public void encoderQRCode(String content, String imgPath, String imgType, int size) {
		try {
			BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);
			
			File imgFile = new File(imgPath);
			// 生成二维码QRCode图片
			ImageIO.write(bufImg, imgType, imgFile);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 生成二维码(QRCode)图片
	 * @param content 存储内容
	 * @param output 输出流
	 * @param imgType 图片类型
	 * @param size 二维码尺寸
	 */
	public void encoderQRCode(String content, OutputStream output, String imgType, int size) {
		try {
			BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);
			// 生成二维码QRCode图片
			ImageIO.write(bufImg, imgType, output);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 生成二维码(QRCode)图片的公共方法
	 * @param content 存储内容
	 * @param imgType 图片类型
	 * @param size 二维码尺寸
	 * @return
	 */
	private BufferedImage qRCodeCommon(String content, String imgType, int size) {
		BufferedImage bufImg = null;
		try {
			Qrcode qrcodeHandler = new Qrcode();
			// 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小
			qrcodeHandler.setQrcodeErrorCorrect('M');
			qrcodeHandler.setQrcodeEncodeMode('B');
			// 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大
			qrcodeHandler.setQrcodeVersion(size);
			// 获得内容的字节数组,设置编码格式
			byte[] contentBytes = content.getBytes("utf-8");
			// 图片尺寸
			int imgSize = 67 + 12 * (size - 1);
			bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB);
			Graphics2D gs = bufImg.createGraphics();
			// 设置背景颜色
			gs.setBackground(Color.WHITE);
			gs.clearRect(0, 0, imgSize, imgSize);

			// 设定图像颜色> BLACK
			gs.setColor(Color.BLACK);
			// 设置偏移量,不设置可能导致解析出错
			int pixoff = 2;
			// 输出内容> 二维码
			if (contentBytes.length > 0 && contentBytes.length < 800) {
				boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
				for (int i = 0; i < codeOut.length; i++) {
					for (int j = 0; j < codeOut.length; j++) {
						if (codeOut[j][i]) {
							gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
						}
					}
				}
			} else {
				throw new Exception("QRCode content bytes length = " + contentBytes.length + " not in [0, 800].");
			}
			gs.dispose();
			bufImg.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return bufImg;
	}
	
	/**
	 * 解析二维码(QRCode)
	 * @param imgPath 图片路径
	 * @return
	 */
	public String decoderQRCode(String imgPath) {
		// QRCode 二维码图片的文件
		File imageFile = new File(imgPath);
		BufferedImage bufImg = null;
		String content = null;
		try {
			bufImg = ImageIO.read(imageFile);
			QRCodeDecoder decoder = new QRCodeDecoder();
			content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8"); 
		} catch (IOException e) {
			System.out.println("Error: " + e.getMessage());
			e.printStackTrace();
		} catch (DecodingFailedException dfe) {
			System.out.println("Error: " + dfe.getMessage());
			dfe.printStackTrace();
		}
		return content;
	}
	
	/**
	 * 解析二维码(QRCode)
	 * @param input 输入流
	 * @return
	 */
	public String decoderQRCode(InputStream input) {
		BufferedImage bufImg = null;
		String content = null;
		try {
			bufImg = ImageIO.read(input);
			QRCodeDecoder decoder = new QRCodeDecoder();
			content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8"); 
		} catch (IOException e) {
			System.out.println("Error: " + e.getMessage());
			e.printStackTrace();
		} catch (DecodingFailedException dfe) {
			System.out.println("Error: " + dfe.getMessage());
			dfe.printStackTrace();
		}
		return content;
	}

	public static void main(String[] args) {
		String imgPath = "G:/TDDOWNLOAD/Michael_QRCode.png";
		String encoderContent = "Hello 大大、小小,welcome to QRCode!" + "\nMyblog [ http://sjsky.iteye.com ]" + "\nEMail [ sjsky007@gmail.com ]";
		TwoDimensionCode handler = new TwoDimensionCode();
		handler.encoderQRCode(encoderContent, imgPath, "png");
//		try {
//			OutputStream output = new FileOutputStream(imgPath);
//			handler.encoderQRCode(content, output);
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
		System.out.println("========encoder success");
		
		
		String decoderContent = handler.decoderQRCode(imgPath);
		System.out.println("解析结果如下:");
		System.out.println(decoderContent);
		System.out.println("========decoder success!!!");
	}
}

 TwoDimensionCodeImage 类:二维码图片对象

 

 

 

package qrcode;

import java.awt.image.BufferedImage;

import jp.sourceforge.qrcode.data.QRCodeImage;

public class TwoDimensionCodeImage implements QRCodeImage {

	BufferedImage bufImg;
	
	public TwoDimensionCodeImage(BufferedImage bufImg) {
		this.bufImg = bufImg;
	}
	
	@Override
	public int getHeight() {
		return bufImg.getHeight();
	}

	@Override
	public int getPixel(int x, int y) {
		return bufImg.getRGB(x, y);
	}

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

}

 

分享到:
评论

相关推荐

    java二维码生成与解析代码实现.docx

    以下是一些关于Java二维码生成与解析的关键知识点: 1. **依赖库**: - `QRCode.jar`:这是用于生成和解码二维码的库,它可能包含了`jp.sourceforge.qrcode`和`com.swetake.util.Qrcode`这两个包,这两个包提供了...

    java二维码生成与解析代码实现代码

    Java二维码生成通常依赖于第三方库,如ZXing(Zebra Crossing)或Java QRCode Library。ZXing是一个开源项目,提供了多种条形码和二维码的读写能力。在Java中使用ZXing,我们需要添加对应的依赖,如果你使用的是...

    二维码生成与解析代码实现

    二维码生成与解析是现代信息化社会中常见的技术,广泛应用于各种场景,如名片交换、网址跳转、支付等。本文将详细讲解如何通过源码实现这一功能,并探讨其中的关键知识点。 首先,我们来看`TwoDimensionCode.java`...

    java二维码生成与解析代码实现(内含核心包QRCode.jar)

    java二维码生成与解析源码内含核心包文件QRCode.jar。 二维码的特点: 1. 高密度编码,信息容量大 可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍。 2. 编码...

    java二维码生成与解析代码实现所需要的QRCode.jar

    该jar包已经集成QRCode的编码包和解码包,下载了可以直接使用! 该jar包已经集成QRCode的编码包和解码包,下载了可以直接使用!

    基于java的二维码生成与解析demo

    这是一个基于java开发的二维码生成与解析 可以根据程序配置的参数设置生成二维码的图片大小 以及密度 这是一个基于java开发的二维码生成与解析 可以根据程序配置的参数设置生成二维码的图片大小 以及密度 这是一个...

    Java二维码生成/解析工具

    QRCodeUtils使用文档详见博客https://blog.csdn.net/qq_24091555/article/details/81263472

    Java QRCode二维码生成与识别 开源

    总的来说,这个Java QRCode二维码生成与识别开源项目提供了一整套解决方案,从生成包含汉字的二维码到读取和解析二维码图像。开发者可以利用这些工具进行各种应用开发,如移动支付、信息分享、门票验证等。通过深入...

    java二维码生成和添加中间图片

    Java二维码生成技术是一种在软件开发中常用的功能,它允许我们将数据编码成二维图像,以便于快速扫描和读取。Qrcode(二维码)是日本Denso Wave公司发明的一种矩阵式条形码,相比于传统的条形码,它能存储更多的数据...

    Java二维码生成和解析实现

    以上就是使用Java和ZXing库实现二维码生成与解析的基本步骤。在实际应用中,可能需要根据具体需求进行错误处理、格式调整、定制样式等。源码文件中的内容可能包括了这些更具体的实现细节,可以深入研究以获取更全面...

    Java 二维码生成、解析

    本文将详细介绍如何使用Google的ZXing库来实现Java环境下的二维码生成与解析。 ZXing,全称Zebra Crossing,是一个开源的多格式一维/二维条码图像处理库,支持多种条码和二维码格式,如QRCode、DataMatrix、UPC等。...

    Java实现的生成二维码和解析二维码URL操作示例

    Java 实现生成二维码和解析二维码 URL 操作示例 Java 是一种广泛使用的编程语言,具有强大的功能和灵活性。在实际应用中,生成二维码和解析二维码 URL 是非常常见的操作。本文将详细介绍 Java 实现生成二维码和解析...

    Java实现二维码生成和解析代码

    本文将详细讲解如何使用Java语言来实现二维码的生成与解析,这是一项非常实用的技术,尤其在移动互联网领域。 首先,我们要了解二维码的基本原理。二维码是一种二维条形码,它通过矩阵形式存储数据,可以包含文字、...

    java二维码生成与解析实例

    Java语言提供了多种库来支持二维码的生成与解析,其中Zxing(Zebra Crossing)是一个开源项目,专为多种一维条码和二维条码提供读取、生成功能。本文将深入探讨如何在Java中利用Zxing库进行二维码的生成与解析。 ...

    JAVA 生成二维码并设置失效机制

    1.通过QRCode.jar包生成二维码,可设置二维码图片格式,二维码图片存放路径,二维码尺寸,二维码颜色 2.二维码扫描内容分为两种,1种为...4.提供通过QRCode.jar生成二维码的全部生产线上代码,可直接运行,含有关键注释

    java二维码生成与解析

    总之,Java二维码生成与解析是Java开发中的实用技能,结合ZXing库,开发者可以轻松实现二维码的创建和读取,以满足各种业务需求。在实际应用中,除了理解基本原理,还需要关注性能优化和安全问题。

    Java 二维码生成与解析包

    Java 二维码生成与解析包,在原有的基础上打包的,易用简单使用方法参照

    基于Java实现,动态生成二维码海报和汉字名字工具_java_代码_下载

    通过这个项目,学习者不仅可以掌握Java图形处理和二维码生成技术,还能了解如何利用Java实现一个实用的小型工具,同时提升项目管理和版本控制的技能。如果你计划深入研究,可以下载源码,阅读和调试代码,甚至扩展其...

    关于Java的二维码的生成与解析

    `TestRead.java` 可能包含了使用特定库读取二维码的代码,而 `TestZXing.java` 可能是基于开源项目ZXing(Zebra Crossing)进行二维码生成的代码实现。 ZXing,或称“条形码扫描器”,是一个全面的、开源的、跨平台...

Global site tag (gtag.js) - Google Analytics