二维条码/二维码(2D barcode) 是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化等特点。最早起源于日本,原本是Denso Wave公司为了追踪汽车零部件而设计的一种条码
具体生成解析代码如下:
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import jp.sourceforge.qrcode.QRCodeDecoder;
import jp.sourceforge.qrcode.data.QRCodeImage;
import jp.sourceforge.qrcode.exception.DecodingFailedException;
import com.swetake.util.Qrcode;
public class QRCodeDecoderUtil
{
/**
* 生成二维码图片
* @param content
* @param imgPath
*/
public static boolean encoderQRCode(String content, String imgPath)
{
Qrcode qrcodeHandler = new Qrcode();
/**
* 设置二维码纠错等级
* L-默认:可以识别已损失的7%的数据
* M-可以识别已损失15%的数据
* Q-可以识别已损失25%的数据
* H-可以识别已损失30%的数据
* 纠错等级越高可存储的信息越少,但对二维码清晰度的要求越小
*/
qrcodeHandler.setQrcodeErrorCorrect('M');
qrcodeHandler.setQrcodeEncodeMode('B');
// 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大
int version = 6;
qrcodeHandler.setQrcodeVersion(version);
byte[] contentBytes = null;
try
{
contentBytes = content.getBytes("gb2312");
}
catch(Exception ex)
{
ex.printStackTrace();
return false;
}
BufferedImage bufImg = new BufferedImage(140, 140, BufferedImage.TYPE_INT_RGB);
Graphics2D gs = bufImg.createGraphics();
gs.setBackground(Color.WHITE);
gs.clearRect(0, 0, 140, 140);
// 设置图像颜色
gs.setColor(Color.BLACK);
// 设置偏移量 避免解析出错
int pixoff = 2;
// 限制最字节数,与version有关
int limit = 120;
int len = null == contentBytes? 0:contentBytes.length;
if (len > 0 && len < limit)
{
boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);
for (int i = 0; i < codeOut.length; i++)
{
for (int j = 0; j < codeOut.length; j++)
{
if (codeOut[j][i])
{
gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
}
}
}
}
else
{
System.err.println("QRCode content bytes length = "
+ contentBytes.length + " not in [ 0,"+limit+" ]. ");
return false;
}
gs.dispose();
bufImg.flush();
File imgFile = new File(imgPath);
// if (mkDir(imgFile))
// {
try
{
ImageIO.write(bufImg, "png", imgFile);
}
catch (IOException e)
{
e.printStackTrace();
return false;
}
// }
return true;
}
// private static boolean mkDir(File file)
// {
// if(file.getParentFile().exists())
// {
// return true;
// }
// else
// {
// if (mkDir(file.getParentFile()))
// {
// return file.mkdir();
// }
// else
// {
// return false;
// }
// }
// }
/**
*
* 解析二维码
* @param imgPath
*
*/
public static String decoderQRCode(String imgPath)
{
File imageFile = new File(imgPath);
BufferedImage bufImg = null;
String decodedData = null;
try
{
bufImg = ImageIO.read(imageFile);
QRCodeDecoder decoder = new QRCodeDecoder();
QRImage qrImage = new QRImage(bufImg);
decodedData = new String(decoder.decode(qrImage));
}
catch (IOException e)
{
e.printStackTrace();
}
catch (DecodingFailedException ex)
{
ex.printStackTrace();
}
return decodedData;
}
/**
* @param args
*/
public static void main(String[] args)
{
String imgPath = "D:\\qrcode\\TEST.png";
boolean result = QRCodeDecoderUtil.encoderQRCode("http://www.baidu.com", imgPath);
if (result)
{
System.out.println(QRCodeDecoderUtil.decoderQRCode(imgPath));
}
}
}
class QRImage implements QRCodeImage
{
BufferedImage bufImg;
public QRImage(BufferedImage bufImg)
{
this.bufImg= bufImg;
}
public int getWidth()
{
return bufImg.getWidth();
}
public int getHeight()
{
return bufImg.getHeight();
}
public int getPixel(int x, int y)
{
return bufImg.getRGB(x,y);
}
}
相关推荐
QRCodeUtils使用文档详见博客https://blog.csdn.net/qq_24091555/article/details/81263472
`TestRead.java` 可能包含了使用特定库读取二维码的代码,而 `TestZXing.java` 可能是基于开源项目ZXing(Zebra Crossing)进行二维码生成的代码实现。 ZXing,或称“条形码扫描器”,是一个全面的、开源的、跨平台...
Java 实现生成二维码和解析二维码 URL 操作示例 Java 是一种广泛使用的编程语言,具有强大的功能和灵活性。在实际应用中,生成二维码和解析二维码 URL 是非常常见的操作。本文将详细介绍 Java 实现生成二维码和解析...
1.通过QRCode.jar包生成二维码,可设置二维码图片格式,二维码图片存放路径,二维码尺寸,二维码颜色 2.二维码扫描内容分为两种,1种为链接式,如:www.zdkc.com,通过链接展示访问的内容,1种为json数据展示,通过...
在IT行业中,生成和解析二维码是一项常见的任务,特别是在移动应用、广告宣传以及数据交换等领域。本文将详细探讨如何使用Java语言来...在实践中,不断优化代码和用户体验,可以提高二维码生成和解析的效率和友好性。
本代码为二维码生成和解析的Java实现代码,包括三个类和一个QRCode的jar包(一个jar包用于生成二维码,一个jar包用于读取二维码尤其用于读取的jar包不好下载,所以就一起放进来了,方便大家学习使用),一个生成...
最新功能支持导入码内容文件批量生成二维码,支持生成带中国二维码注册解析中心(IDcode)认证的二维码。 运行方式:1、在项目上右击 运行java程序,入口在com.fiwan.qrgenerator.GeneratorForm 2、打jar包 java -...
这是一个基于java开发的二维码生成与解析 可以根据程序配置的参数设置生成二维码的图片大小 以及密度 这是一个基于java开发的二维码生成与解析 可以根据程序配置的参数设置生成二维码的图片大小 以及密度 这是一个...
总之,二维码生成与解析是Java后台开发中的实用技能,涉及到编码、图像处理、数据校验等多个技术领域。掌握这一技术,不仅可以增强应用的交互性,还能为用户提供更便捷的信息获取途径。通过深入理解二维码的原理和...
Java 二维码生成与解析是Java开发中常见的功能需求,尤其在移动互联网时代,二维码被广泛应用于数据交换、链接跳转、支付凭证等场景。本文将详细介绍如何使用Google的ZXing库来实现Java环境下的二维码生成与解析。 ...
2. **二维码生成** 要生成二维码,我们需要使用`MultiFormatWriter`和`BitMatrix`类。首先,将要编码的数据转换为`BarcodeFormat`对象,然后调用`encode`方法生成`BitMatrix`对象。接着,使用`BitmapEncoder`将其...
二维码生成及解析内涵两个java类原码与QRCode所需的jar包。 《主要是生成二维码图片》 《主要是生成二维码图片》 《主要是生成二维码图片》 《主要是生成二维码图片》 《主要是生成二维码图片》 《主要是生成二维码...
这个压缩包提供了必要的代码示例,包括`qrcode.java`、`MatrixToImageWriter.java`和`LogoConfig.java`三个关键文件,它们分别对应二维码生成、图像转换以及自定义配置的功能。下面我们将逐一解析这些知识点。 1. *...
本项目是关于"基于Spring Boot的二维码生成与解析接口",将重点探讨如何在Spring Boot环境中实现二维码的生成与解码功能。 首先,二维码(Quick Response Code)是一种二维条形码,能够存储更多的数据,包括URL、...
3. **生成工具**:市面上有许多免费和付费的二维码生成工具,如草料二维码、在线二维码生成器等。这些工具通常提供简单的用户界面,只需要输入要编码的信息,选择相应的设置,即可生成二维码图片。 4. **自定义设计...
总的来说,这个Java QRCode二维码生成与识别开源项目提供了一整套解决方案,从生成包含汉字的二维码到读取和解析二维码图像。开发者可以利用这些工具进行各种应用开发,如移动支付、信息分享、门票验证等。通过深入...
二维码生成和解析是现代信息化技术中的重要组成部分,尤其在移动互联网和物联网领域中广泛应用。Java作为一门跨平台的编程语言,提供了丰富的库和工具来支持二维码的生成与解析。本篇将详细介绍如何在Java环境中实现...
在`ecodeTest`这个项目中,你可以找到一个已经实现二维码生成和解析功能的示例,通过运行这个项目,你可以更好地理解和学习如何在Android应用中集成二维码功能。在实际开发中,记得根据项目需求进行适当的优化和调整...
Java作为一种广泛应用的编程语言,提供了多种库和方法来生成和解析二维码。本篇文章将深入探讨如何使用Java进行二维码的生成与解析。 一、生成二维码 1. 引入库:在Java中,我们可以使用第三方库如Zxing(又名...
总结来说,二维码生成与解析是一个涉及编码、图像处理和解码等技术的过程。在实际应用中,开发者需要理解这些基本原理,并选择合适的工具或库来实现功能,同时关注兼容性、安全性和用户体验。通过深入理解这些技术点...