龙空技术网

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

大胡同学ii 687

前言:

当前小伙伴们对“java二维码制作”大概比较讲究,姐妹们都想要了解一些“java二维码制作”的相关内容。那么小编同时在网络上汇集了一些对于“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 = ";;				/**		 * 生成二维码		 */		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();}

标签: #java二维码制作 #java解析图片二维码demo