生成二维码主要有三种技术: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 代码,可以实现二维码生成,亲测可用。 代码为2016年6月9日从GitHub下载的,版本为3.2.1 GitHub对应地址代码为: https://github.com/zxing/zxing jar包原始下载地址为:...
2. **生成二维码**:使用ZXing生成二维码的代码示例如下: ```java import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import ...
在本文中,我们将深入探讨如何使用ZXing来生成和解析二维码,以及如何利用QRcode.java类创建二维码名片。 1. **生成二维码** - **ZXing API介绍**:ZXing提供了Java API,可以方便地集成到各种项目中。主要的类有`...
1. 使用Zxing生成二维码 在Java环境中,我们可以使用Zxing的`MultiFormatWriter`和`BitMatrix`类来生成二维码。首先,我们需要将要编码的数据转换为字节数组,然后调用`MultiFormatWriter.encode()`方法生成`...
在使用ZXing生成和解析二维码时,我们需要了解以下几个关键概念和技术: 1. **生成二维码**: - **MatrixToImageWriter**: 这是ZXing库中的一个类,用于将二维码的数据矩阵(一个二维的布尔值数组)转换为图像文件...
在标题“利用ZXING生成简易二维码”中,提到的核心知识点是使用ZXing库来创建二维码。ZXing库提供了Java、Android以及命令行工具等多种方式来操作二维码。生成二维码的基本步骤包括: 1. **配置ZXing**: 首先,你...
Google开源的ZXing(Zebra Crossing)库为开发者提供了跨平台的二维码和条形码生成与解码能力。本项目以ZXing为基础,结合自定义功能,如生成带有Logo的彩色二维码,为开发人员提供了更丰富的应用场景。 ZXing(又...
本教程将详细介绍如何在Java中使用ZXing库来生成和解析二维码。 首先,我们需要了解ZXing库的基本结构。ZXing(又称“条形码彩虹”)包含了多个模块,如Core核心模块,用于处理各种编码格式的低级操作;JavaME模块...
在Java中使用Zxing生成二维码,首先需要将Zxing库添加到项目依赖中。如果你使用Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>com.google.zxing</groupId> <artifactId>core <version>3.4.1 ...
Java二维码解析和生成库ZXing,全称"Zebra Crossing",是一款强大的开源项目,用于处理一维和二维条形码。ZXing提供了一系列API,让开发者能够方便地在Java应用中实现条形码的读取和生成。该库不仅支持常见的QR码,...
在“使用ZXing加密解析二维码”这一主题中,我们将深入探讨如何利用ZXing库实现二维码的加密和解码过程。首先,我们需要理解二维码的基本结构。二维码是一种二维条形码,可以存储更多的数据,包括文本、网址、联系...
3. **解析二维码**:除了生成,`google.zxing`还具备读取二维码的能力。它支持多种条码格式,包括QR码。通过扫描二维码图像,ZXing库可以解析出其中包含的信息,供应用程序使用。 在使用`Google.zxing二维码生成...
在本案例中,我们主要关注的是ZXing在生成和解析二维码方面的应用。 **1. 二维码生成** 生成二维码是ZXing库的核心功能之一。二维码可以存储大量的文本信息,如网址、联系信息、文本字符串等。在Java环境中,我们...
这个“Zxing生成的AES加密二维码”示例展示了如何结合这两者,即使用强大的AES(Advanced Encryption Standard)加密技术和Zxing(ZXing,意为“条形码零知识”)二维码库来确保数据的安全传输。下面我们将深入探讨...
在本项目中,开发者已经对ZXing 2.2版本进行了封装,简化了使用流程,使得在Java项目中生成和解析二维码变得更加方便。 首先,我们要理解ZXing库的核心功能。ZXing提供了多种类和方法,用于二维码的生成和解码。在...
在Java环境中,使用Zxing库可以方便地创建和解析二维码。以下将详细介绍如何使用Java和Zxing实现二维码的生成与读取。 1. **安装Zxing库** 首先,你需要在项目中引入Zxing库。如果你使用的是Maven,可以在`pom.xml...
3. **二维码解析**:ZXing库也包含了解析二维码的功能。使用`com.google.zxing.QRCodeReader`类,可以读取并解码二维码中的数据。它能自动处理图像预处理,如灰度化、二值化,以提高识别率。 4. **核心组件**:`...
这个项目不仅支持生成二维码和条形码,还支持扫描和解析这些编码,使得开发者能够轻松地在应用中集成二维码功能。在"Android zxing二维码扫描 从相册选择二维码识别"这个主题中,我们将深入探讨如何利用ZXing库实现...
以下是使用ZXing生成二维码的基本步骤: 1. 引入ZXing库:将`zxing3.3.1.jar`添加到项目的类路径中,如果是Java项目,可以将其放入`lib`目录下,或者在Maven/Gradle构建工具中配置依赖。 2. 创建BitMatrix对象:这...
在Android平台上进行二维码开发时,ZXing(Zebra Crossing)是一个非常流行的开源库,它提供了多种条码和二维码的读取与生成功能。本项目针对ZXing进行了优化,特别是解决了中文乱码的问题,使得开发者在处理包含...