java生成二维码并解析二维码(QRCode方式)

准备工作  下载jar

http://www.swetake.com/qrcode/java/qr_java.html

https://zh.osdn.net/projects/qrcode/downloads/28391/qrcode.zip/

jar下载完毕后新建项目

一   生成二维码,新建类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.swetake.util.Qrcode;

public class CreateQRCode {
	public static void main(String[] args) throws Exception {
		Qrcode x=new Qrcode();
		
		x.setQrcodeErrorCorrect('M');  //M代表纠错等级
		x.setQrcodeEncodeMode('B');    //A代表a-Z,B代表其他
		x.setQrcodeVersion(7);         //版本
		int width = 67+12*(7-1);
		int height = 67+12*(7-1);
		String qrData = "Hello World";
		
		BufferedImage bufferdImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
		Graphics2D gs = bufferdImage.createGraphics();
		gs.setBackground(Color.BLACK);
		gs.setColor(Color.WHITE);
		gs.clearRect(0, 0, width, height);
		
		int pixoff = 2;  //偏移量
		
		byte[] d =qrData.getBytes("gb2312");
		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,3,3);
			    }
			}
		    }
		}
		gs.dispose();
		bufferdImage.flush();
		ImageIO.write(bufferdImage, "png", new File("E:/code/img.png"));
		
	}

}

二  解析二维码  

新建工具类 MYQRCodeImage.java

package com.qrcode;

import java.awt.image.BufferedImage;

import jp.sourceforge.qrcode.data.QRCodeImage;

public class MYQRCodeImage implements QRCodeImage {
	BufferedImage bufferedImage;
	
	public MYQRCodeImage(BufferedImage bufferedImage){
		this.bufferedImage = bufferedImage;
	}

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

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

	@Override
	public int getWidth() {
		return bufferedImage.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("E:/code/img.png");
		BufferedImage bufferedImage = ImageIO.read(file);
		QRCodeDecoder codeDecoder = new QRCodeDecoder();
		String result = new String(codeDecoder.decode(
				new MYQRCodeImage(bufferedImage)),"gb2312");
		System.out.println(result);
				
	} 

}


关于解析的时候报错:Invalid number of Finder Pattern detected 是因为生成二维码的时候设置的图片长宽过大,而二维码只占了其中左上角一部分,导致解析出错。只需调整长宽即可。

拓展:也可以使用jQuery方式生成二维码,参考https://github.com/jeromeetienne/jquery-qrcode

https://www.cnblogs.com/prayjourney/p/13899306.html https://www.cnblogs.com/jing5464/p/9951198.html

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值