Java生成二维码与解码二维码

下载QRCode.jar包
下载完成后在cmd命令行执行以下命令

 mvn install:install-file -Dfile = QRCode的路径 -DgroupId=QRCode -DartifactId=QRCode -Dversion=3.0 -Dpackaging=jar

注意: 需要配置maven环境变量
在pom.xml文件里添加jar包

<dependency>
	 <groupId>QRCode</groupId>
	 <artifactId>QRCode</artifactId>
	 <version>3.0</version>
</dependency> 

运行类

package test;

public class Test {

	public static void main(String[] args) throws Exception {
		
		// 生成后的二维码存放的路径
		String imgPath = "D://二维码.png";
		// 二维码的内容
		String content = "hello world";
		// 跳转网页
//		String content = "http://www.baidu.com";
		
		/**
		 * 生成二维码
		 */
		QRCodeUtil qrCodeUtil = new QRCodeUtil();
		qrCodeUtil.encoderQRCode(content, imgPath, "png", 17);
	
		/**
		 * 解码二维码
		 */
		String imgContent = qrCodeUtil.decodeQrCode(imgPath);
		System.out.println("imgContent:" + imgContent);
		
	}
}

生成二维码的方法

public void encoderQRCode(String content, String imgPath, String imgType, int size) {
		File file = new File(imgPath);

		BufferedImage bufImg = qrCodeCommon(content, imgType, size);

		try {
			ImageIO.write(bufImg, imgType, file);
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	/**
	 * 生成一个二维码的BufferedImage
	 * 
	 * @param content
	 *            内容
	 * @param imgType
	 *            类型
	 * @param size
	 *            二维码边长
	 * @return
	 */
	public BufferedImage qrCodeCommon(String content, String imgType, int size) {
		// BufferedImage.TYPE_INT_ARGB:RGB三基色
		BufferedImage bufImg = null;

		Qrcode qrcode = new Qrcode();
		// 设置二维码的拍错率
		qrcode.setQrcodeErrorCorrect('M');
		// 可存放的信息
		qrcode.setQrcodeEncodeMode('B');
		// 尺寸:取值范围:1-40
		qrcode.setQrcodeVersion(size);
		byte[] bytes = null;
		try {
			bytes = content.getBytes("utf-8");
		} catch (Exception e) {
			e.printStackTrace();
		}

		// 将内容转换成字节数组
		boolean[][] codeOut = qrcode.calQrcode(bytes);

		int imgSize = 67 + 12 * (size - 1);
		// BufferedImage:内存中的图片
		bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_ARGB);
		// 创建一个画板
		Graphics2D gs = bufImg.createGraphics();
		// 设置二维码背景颜色:一般为白色
		gs.setBackground(Color.WHITE);
		// 初始化,x和y为0代表左上角,size一样代表是个正方形
		gs.clearRect(0, 0, imgSize, imgSize);
		// 设置二维码颜色:一般为黑色
		gs.setColor(Color.BLACK);

		for (int i = 0; i < codeOut.length; i++) {
			for (int j = 0; j < codeOut.length; j++) {
				if (codeOut[i][j]) {
					gs.fillRect(j * 3, i * 3, 3, 3);
				}
			}
		}

		// 给二维码中间增加logo
		try {
			// logo路径
			File file = new File("D://jieZai.jpg");
			// 加载一个Image对象
			Image logo = ImageIO.read(file);
			int width = bufImg.getWidth();
			int height = bufImg.getHeight();

			// 在已生成的二维码上画logo
			gs.drawImage(logo, imgSize / 5 * 2, imgSize / 5 * 2, width / 5, height / 5, null);

		} catch (Exception e) {
			e.printStackTrace();
		}

		gs.dispose(); // 释放空间
		bufImg.flush(); // 刷新

		return bufImg;
	}

解码的方法

 /**
* 解码
* 
* @param imgPath  图片路径
* @return
*/
public String decodeQrCode(String qrImg) {
	File file = new File(qrImg);
	Result result = null;
	if (!qrImg.isEmpty()) {
		try {
			// BufferedImage内存中的图片
			BufferedImage image = ImageIO.read(file);
	
			BinaryBitmap binaryBitmap = new BinaryBitmap(
					new HybridBinarizer(new BufferedImageLuminanceSource(image)));
	
			// 定义二维码的参数:
			HashMap<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();
			// 定义字符集
			hints.put(DecodeHintType.CHARACTER_SET, "utf-8");
			// 解密
			result = new MultiFormatReader().decode(binaryBitmap, hints);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	return result.getText();
}

生成字符串内容的二维码
在这里插入图片描述
控制台
在这里插入图片描述
生成跳转网页的二维码
在这里插入图片描述
控制台
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值