这篇使用qrcode生成二维码,代码如下:
package com.wjl.test; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import jp.sourceforge.qrcode.QRCodeDecoder; import jp.sourceforge.qrcode.data.QRCodeImage; import com.swetake.util.Qrcode; /** * 使用qrcode生成与解析二维码 * 两个问题: * 1、内容不能太多,若是太多将不能生成二维码 * 2、没有logo的二维码可以解析,有logo的二维码解析时报错:Give up decoding * */ public class CreateQRCodeInqrcode { private static final String encode="GB2312"; public static void main(String[] args) { //1、定义qrcode的版本、二维码图片后缀名和内容 int version = 7; //png比jpg的两个优点:1、png支持透明 2、png较小 String format = "png"; String contents = "使用qccode生成二维码"; System.out.println("生成二维码内容:"+contents); //2、定义二维码文件 String filePath = "D:"+File.separator+"temp"+File.separator+"qccode"+System.currentTimeMillis()+"."+format; File QRFile = new File(filePath); //3、生成二维码 CreateQRCodeInqrcode qrcode = new CreateQRCodeInqrcode(); boolean flag = qrcode.createQRCode(contents,version,format,QRFile); if(flag){//说明生成二维码成功 System.out.println("文件路径:"+filePath); //4、添加logo String logoPath = "D:"+File.separator+"temp"+File.separator+"logo.jpg"; File logoFile = new File(logoPath); //为二维码添加logos(这里有一个问题:若没有LOGO可以正常解析,若有LOGO解析的时候报错:Give up decoding) //int resu = qrcode.addLogoQRCode(QRFile, logoFile, format,2); //5、解析二维码 String result = qrcode.readQRCode(QRFile); System.out.println("解析二维码内容:"+result); } } /** * 该方法用来生成二维码 * @param contents:二维码内容 * @param width:二维码宽度 * @param version:版本 * @param format:二维码图片后缀名 * @param QRFile:二维码图片文件 * @return boolean:true-生成成功 false-生成失败 * */ public boolean createQRCode(String contents,int version,String format,File QRFile){ boolean result = false; try{ Qrcode x = new Qrcode(); x.setQrcodeErrorCorrect('M');//纠错等级 x.setQrcodeEncodeMode('B');//N代表数字 A代表z-Z,B代表其他字符 // 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大 x.setQrcodeVersion(version); int width = 67+12*(version-1); int height = width; BufferedImage bufferedImage = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB); Graphics2D gs = bufferedImage.createGraphics(); gs.setBackground(Color.WHITE);//背景色 gs.setColor(Color.BLACK); gs.clearRect(0, 0, width, height);//清除画板内容 int pixoff = 2;//偏移量(若没有偏移量,可能会导致解析出错) //将内容转成字节数 byte[] data = contents.getBytes(encode); if(data.length>0 && data.length<120){ boolean[][] s = x.calQrcode(data); 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+pixoff, 3, 3); } } } } gs.dispose(); bufferedImage.flush(); ImageIO.write(bufferedImage, format, 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{ BufferedImage bufferedImage2 = ImageIO.read(QRFile); QRCodeDecoder codeDecoder = new QRCodeDecoder(); byte[] re = codeDecoder.decode(new MyQRCodeImage(bufferedImage2)); result = new String(re,encode); }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; } } class MyQRCodeImage implements QRCodeImage{ BufferedImage bufferedImage; public MyQRCodeImage(BufferedImage bufferedImage){ this.bufferedImage = bufferedImage; } public int getHeight() { return bufferedImage.getHeight(); } public int getPixel(int arg0, int arg1) { return bufferedImage.getRGB(arg0, arg1); } public int getWidth() { return bufferedImage.getWidth(); } }
需要的jar包:
qrcode.jar:用来生成二维码
Qrcode_swetake.jar:用来解析二维码
相关推荐
6. **解码过程**:虽然 PHP QR Code 主要是用来生成二维码,但通过其他库或服务,可以读取和解析二维码中的信息。 7. **应用场景**:二维码广泛应用于网站链接、电子支付、产品追溯、名片交换、Wi-Fi 密码分享等...
1. **添加控件**:首先,你需要在VB环境中添加QRCode生成控件到工具箱。这通常涉及到下载一个支持VB的QRCode控件库,将其安装到系统中,然后在VB的工具箱中就能看到这个控件。 2. **设计界面**:在VB的Form设计器中...
这个压缩包"安卓条码扫描二维码相关-java使用qrCode生成二维码实例中间带logo.zip"提供了使用Java语言生成带有logo的二维码的实例代码。以下是关于这个主题的详细知识点: 1. **二维码基本原理**: 二维码(Quick ...
1. **QRcode生成**: 生成二维码的过程涉及到编码算法,它将文本信息转换为特定的二进制格式,然后通过矩阵布局显示为可见的图形。常用的库有ZXing(Zebra Crossing),它是一个开源的Java库,支持多种一维和二维...
本代码为二维码生成和解析的Java实现代码,包括三个类和一个QRCode的jar包(一个jar包用于生成二维码,一个jar包用于读取二维码尤其用于读取的jar包不好下载,所以就一起放进来了,方便大家学习使用),一个生成...
然后,可以通过导入相关包并调用其提供的方法来生成或解析二维码。例如,生成二维码的一般步骤可能包括: 1. 创建一个二维码生成器对象。 2. 设置编码的文本或数据,以及可能的编码格式(如URL、文本、二进制等)。...
【QrCode生成和解析二维码】是IT领域中关于数据编码和识别的一种技术,主要应用于移动设备、产品标签、广告等场景,便于快速扫描获取信息。QrCode,全称Quick Response Code,即快速响应码,由日本Denso Wave公司于...
- `java使用qrCode生成二维码实例`:可能是一个Java类,包含了实际生成二维码的逻辑,包括编码、设置Logo和生成Bitmap的过程。 通过学习这个实例,开发者可以了解如何在Android应用中集成二维码生成功能,并且掌握...
"lib"目录则很可能包含了与QRCode生成和解析相关的第三方库文件,这些jar包可能包含了处理图像、编码和解码等任务所需的API。例如,常见的库可能有ZXing(Zebra Crossing),这是一个开源的条形码和二维码读写库,...
3. 解析二维码:读取二维码图像文件,然后使用对应的解码方法获取隐藏在图像中的数据。 4. 错误处理:处理可能的解码错误,比如图像模糊、二维码格式不正确等问题。 为了确保兼容性和效率,开发者需要根据具体需求...
二维码生成及解析内涵两个java类原码与QRCode所需的jar包。 《主要是生成二维码图片》 《主要是生成二维码图片》 《主要是生成二维码图片》 《主要是生成二维码图片》 《主要是生成二维码图片》 《主要是生成二维码...
5. 解析二维码:如果需要读取二维码,可以使用库提供的解码函数,从图像中提取数据。 在实际应用中,这两个库可能被用于移动应用开发、网页设计、自动化流程控制等领域。例如,电商网站可能利用它们生成商品二维码...
本资源提供了使用C#编程语言编写的二维码生成与解析器的源码,这对于理解和学习如何在C#环境下处理二维码具有很高的价值。 首先,C#是一种面向对象的、现代的编程语言,由微软开发,主要应用于Windows平台的开发,...
本主题将深入探讨“QrCode 二维码生成与解析”,包括如何使用JavaScript生成二维码以及如何利用Java工程解析二维码图片文件。 首先,我们来看二维码生成的过程。在JavaScript环境下,可以借助开源库如`qrcode-...
1. **QRCode生成** - **编码原理**:二维码由黑白相间的模块组成,每个模块代表一个二进制位。根据数据类型和数据量,二维码会自动调整布局以存储信息。 - **编码过程**:编码过程中,我们需要将文本、URL、名片等...
为了解决这个问题,开发者需要使用能够支持UTF-8编码的二维码生成库,ThoughtWorks.QRCode可能已经考虑到了这一点,确保在生成包含中文的二维码时,能够正确地编码和解码,防止出现乱码。 使用这个QRCode源代码,...
使用`QrCodeDecoder`类可以解析二维码图像中的数据。 8. **实际应用**:在移动应用开发、物联网设备标识、电子票务等领域,生成和读取二维码都是常见操作,QrCode.Net提供了方便的接口供开发者使用。 总的来说,...
要生成彩色二维码,我们需要使用第三方库,如`qrcode-color`。首先,安装该库: ``` npm install qrcode-color --save ``` 然后,在uniapp中引入并使用该库,指定颜色和背景: ```javascript const qr = ...
在Java环境中,生成和解析二维码是通过特定的库或API实现的。本项目提供了一个完整的Eclipse项目,包含编码和解码过程的源代码,并封装在一个jar包中,方便开发者直接使用。 生成二维码主要涉及以下知识点: 1. **...
总的来说,使用C#调用QRCode.dll生成和解析二维码需要理解二维码编码原理,正确处理字符编码,以及考虑可能的数据长度限制。在实际应用中,可能还需要结合错误处理、数据安全和用户体验等多个方面进行优化。希望这些...