`

生成二维码

 
阅读更多

TwoDimensionCode
package com.mypocketbaby.commons.utils;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.imageio.ImageIO;

import jp.sourceforge.qrcode.QRCodeDecoder;
import jp.sourceforge.qrcode.exception.DecodingFailedException;

import com.swetake.util.Qrcode;

public class TwoDimensionCode {

/**
* 生成二维码(QRCode)图片
* @param content 存储内容
* @param imgPath 图片路径
*/
public void encoderQRCode(String content, String imgPath) {
this.encoderQRCode(content, imgPath, "png", 7);
}

/**
* 生成二维码(QRCode)图片
* @param content 存储内容
* @param output 输出流
*/
public void encoderQRCode(String content, OutputStream output) {
this.encoderQRCode(content, output, "png", 7);
}

/**
* 生成二维码(QRCode)图片
* @param content 存储内容
* @param imgPath 图片路径
* @param imgType 图片类型
*/
public void encoderQRCode(String content, String imgPath, String imgType) {
this.encoderQRCode(content, imgPath, imgType, 7);
}

/**
* 生成二维码(QRCode)图片
* @param content 存储内容
* @param output 输出流
* @param imgType 图片类型
*/
public void encoderQRCode(String content, OutputStream output, String imgType) {
this.encoderQRCode(content, output, imgType, 7);
}

/**
* 生成二维码(QRCode)图片
* @param content 存储内容
* @param imgPath 图片路径
* @param imgType 图片类型
* @param size 二维码尺寸
*/
public void encoderQRCode(String content, String imgPath, String imgType, int size) {
try {
BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);

File imgFile = new File(imgPath);
// 生成二维码QRCode图片
ImageIO.write(bufImg, imgType, imgFile);
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 生成二维码(QRCode)图片
* @param content 存储内容
* @param output 输出流
* @param imgType 图片类型
* @param size 二维码尺寸
*/
public void encoderQRCode(String content, OutputStream output, String imgType, int size) {
try {
BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);
// 生成二维码QRCode图片
ImageIO.write(bufImg, imgType, output);
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 生成二维码(QRCode)图片的公共方法
* @param content 存储内容
* @param imgType 图片类型
* @param size 二维码尺寸
* @return
*/
private BufferedImage qRCodeCommon(String content, String imgType, int size) {
BufferedImage bufImg = null;
try {
Qrcode qrcodeHandler = new Qrcode();
// 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小
qrcodeHandler.setQrcodeErrorCorrect('M');
qrcodeHandler.setQrcodeEncodeMode('B');
// 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大
qrcodeHandler.setQrcodeVersion(size);
// 获得内容的字节数组,设置编码格式
byte[] contentBytes = content.getBytes("utf-8");
// 图片尺寸
int imgSize = 67 + 12 * (size - 1);
bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB);
Graphics2D gs = bufImg.createGraphics();
// 设置背景颜色
gs.setBackground(Color.WHITE);
gs.clearRect(0, 0, imgSize, imgSize);

// 设定图像颜色> BLACK
gs.setColor(Color.BLACK);
// 设置偏移量,不设置可能导致解析出错
int pixoff = 2;
// 输出内容> 二维码
if (contentBytes.length > 0 && contentBytes.length < 800) {
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 {
throw new Exception("QRCode content bytes length = " + contentBytes.length + " not in [0, 800].");
}
gs.dispose();
bufImg.flush();
} catch (Exception e) {
e.printStackTrace();
}
return bufImg;
}

/**
* 解析二维码(QRCode)
* @param imgPath 图片路径
* @return
*/
public String decoderQRCode(String imgPath) {
// QRCode 二维码图片的文件
File imageFile = new File(imgPath);
BufferedImage bufImg = null;
String content = null;
try {
bufImg = ImageIO.read(imageFile);
QRCodeDecoder decoder = new QRCodeDecoder();
content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8");
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
e.printStackTrace();
} catch (DecodingFailedException dfe) {
System.out.println("Error: " + dfe.getMessage());
dfe.printStackTrace();
}
return content;
}

/**
* 解析二维码(QRCode)
* @param input 输入流
* @return
*/
public String decoderQRCode(InputStream input) {
BufferedImage bufImg = null;
String content = null;
try {
bufImg = ImageIO.read(input);
QRCodeDecoder decoder = new QRCodeDecoder();
content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8");
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
e.printStackTrace();
} catch (DecodingFailedException dfe) {
System.out.println("Error: " + dfe.getMessage());
dfe.printStackTrace();
}
return content;
}

public static void main(String[] args) {
String imgPath = "D:/TDDOWNLOAD/Michael_QRCode.png";
String encoderContent = "http://hao123.com";
TwoDimensionCode handler = new TwoDimensionCode();
handler.encoderQRCode(encoderContent, imgPath, "png");
// try {
// OutputStream output = new FileOutputStream(imgPath);
// handler.encoderQRCode(content, output);
// } catch (Exception e) {
// e.printStackTrace();
// }
System.out.println("========encoder success");


String decoderContent = handler.decoderQRCode(imgPath);
System.out.println("解析结果如下:");
System.out.println(decoderContent);
System.out.println("========decoder success!!!");
}
}

TwoDimensionCodeImage
package com.mypocketbaby.commons.utils;

import java.awt.image.BufferedImage;

import jp.sourceforge.qrcode.data.QRCodeImage;

public class TwoDimensionCodeImage implements QRCodeImage {

BufferedImage bufImg;

public TwoDimensionCodeImage(BufferedImage bufImg) {
this.bufImg = bufImg;
}

@Override
public int getHeight() {
return bufImg.getHeight();
}

@Override
public int getPixel(int x, int y) {
return bufImg.getRGB(x, y);
}

@Override
public int getWidth() {
return bufImg.getWidth();
}

}



TestEnDeCode
package com.mypocketbaby.commons.utils;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Hashtable;

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.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.Reader;
import com.google.zxing.ReaderException;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.common.HybridBinarizer;

public class TestEnDeCode {


public static void main(String[] args) {
TestEnDeCode t=new TestEnDeCode();
t.encode();
t.decode();

}

/**
* 创建二维码
* @param args args[0]为二维码内容,args[1]为二维码图片生成后存放的路径
* @throws Exception
*/
public void CreateQRCode(String[] args) throws Exception
{
try
{
// 1、参数初始化
String text = args[0];// 二维码内容
String QRCodeDir = args[1];// 二维码生成后存放的路径
int width = 250;
int height = 250;
String format = "gif";// 二维码的图片格式
// 2、生成二维护码的接口实例化
HashMap<EncodeHintType, String> hints = new HashMap<EncodeHintType, String>();
hints.put(EncodeHintType.CHARACTER_SET,"utf-8");// 内容所使用编码
BitMatrix bitMatrix = new MultiFormatWriter().encode(text,
BarcodeFormat.QR_CODE,width,height);
// 3、生成二维码
File outputFile = new File(QRCodeDir);
MatrixToImageWriter.writeToFile(bitMatrix,format,outputFile);
}
catch(Exception e)
{
e.printStackTrace();
throw e;
}
}

// 编码
public void encode() {
try {
String str = "http://www.hao123.com";// 二维码内容
String path = "D:\\hwy.png";
BitMatrix byteMatrix;
byteMatrix = new MultiFormatWriter().encode(new String(str.getBytes("GBK"),"utf-8"),
BarcodeFormat.QR_CODE, 200, 200);
File file = new File(path);

MatrixToImageWriter.writeToFile(byteMatrix, "png", file);
} catch (Exception e) {
e.printStackTrace();
}
}

// 解码
public void decode() {
try {
Reader reader = new MultiFormatReader();
String imgPath = "D:\\hwy.png";
File file = new File(imgPath);
BufferedImage image;
try {
image = ImageIO.read(file);
if (image == null) {
System.out.println("Could not decode image");
}
LuminanceSource source = new BufferedImageLuminanceSource(image);
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(
source));
Result result;
Hashtable hints = new Hashtable();
hints.put(DecodeHintType.CHARACTER_SET, "GBK");
result = new MultiFormatReader().decode(bitmap, hints);
String resultStr = result.getText();
System.out.println(resultStr);

} catch (IOException ioe) {
System.out.println(ioe.toString());
} catch (ReaderException re) {
System.out.println(re.toString());
}

} catch (Exception ex) {

}
}

}
分享到:
评论

相关推荐

    WPS插件 自动生成二维码4.0版.zip

    Excel全自动生成二维码插件,全自动生成二维码,就像公式一样自动更新。 企业中产品出库前通常需要在包装箱上贴上标签,标签上需要有二维码或者条形码从而方便对方快速入库(扫码即可识别箱子中的产品品名、型号、...

    JAVA 生成二维码并设置失效机制

    1.通过QRCode.jar包生成二维码,可设置二维码图片格式,二维码图片存放路径,二维码尺寸,二维码颜色 2.二维码扫描内容分为两种,1种为链接式,如:www.zdkc.com,通过链接展示访问的内容,1种为json数据展示,通过...

    C# 生成二维码源码 可生成图片 底部可显示文字

    本文将详细解析标题为“C# 生成二维码源码 可生成图片 底部可显示文字”的知识内容,以及如何在C#环境中实现这一功能。 首先,C#是微软开发的一种面向对象的编程语言,它具有丰富的类库和强大的.NET框架支持,非常...

    Java实现的生成二维码和解析二维码URL操作示例

    Java 实现生成二维码和解析二维码 URL 操作示例 Java 是一种广泛使用的编程语言,具有强大的功能和灵活性。在实际应用中,生成二维码和解析二维码 URL 是非常常见的操作。本文将详细介绍 Java 实现生成二维码和解析...

    通过Excel批量生成二维码exe执行程序,一键点击批量生成

    本主题关注的是如何使用Python编程语言结合Excel来批量生成二维码的exe执行程序,实现一键式快速生成。这个过程涉及到几个关键的技术点,包括Python脚本编写、Excel数据处理以及二维码生成库的使用。 首先,Python...

    生成二维码_labview二维码_labviewqrcode_二维码_

    在本主题中,我们主要关注如何利用LabVIEW来生成二维码。二维码(Quick Response Code)是一种二维条码,能存储大量数据,如网址、文本、联系信息等,且读取速度快,应用广泛。 生成二维码在LabVIEW中通常涉及到...

    ASP生成二维码代码

    在本文中,我们将探讨如何使用ASP生成二维码,以及相关知识点。 首先,生成二维码涉及的主要技术是QR Code编码,它是一种二维条形码,能够存储大量的数据,如网址、文本、联系人信息等。在ASP中实现二维码生成,...

    原生js生成二维码(完美可用)

    在IT行业中,生成二维码是一种常见的数据编码方式,它能够将各种信息如网址、文本、名片等转换成图像形式,方便用户快速扫描。本资源提供的是一款基于原生JavaScript编写的二维码生成器,无需依赖任何外部库,简洁...

    vb纯代码生成二维码源代码,支持低中高容错生成

    在VB(Visual Basic)编程环境中,生成二维码是一项常见的需求,特别是在数据交换、移动应用和物联网等领域。本资源提供了一个纯代码实现的二维码生成方案,它支持低、中、高三档不同的容错级别,以适应不同场景下的...

    单片机生成二维码 c语言代码 支持中文

    在本文中,我们将深入探讨如何在单片机环境中利用C语言生成二维码,特别是那些支持中文字符的二维码。二维码(Quick Response Code)作为一种高效的数据编码方式,广泛应用于物联网、自动化和移动设备等领域。对于...

    PHP生成二维码类库

    3. **生成二维码**:调用`QRcode::png()`或其它方法生成指定格式的二维码图像。 4. **显示或保存图像**:将生成的二维码输出到浏览器或保存到服务器上。 示例代码如下: ```php require_once 'path/to/qrlib.php';...

    利用STM32生成二维码,实现二维码的转换

    在本文中,我们将探讨如何利用STM32微控制器生成二维码,实现数据的编码和解码,以便于信息的快速传递和读取。 首先,我们要了解二维码(Quick Response Code)的基本原理。二维码是一种二维条形码,能存储比传统...

    pb生成二维码_125

    【标题】"pb生成二维码_125"指的是在PowerBuilder(PB)环境中实现二维码生成的一个实例项目。这个实例特别适合初学者或者需要快速理解二维码生成逻辑的开发者,因为其设计得简单明了,一看就能理解其工作原理。 ...

    生成二维码到word中

    在IT行业中,生成二维码并将其整合到Word文档中是一项实用的技术,尤其在数据分享、信息传递和自动化流程中。这个任务涉及到三个主要技术领域:二维码生成、PHP编程语言以及Microsoft Word文档处理。以下是对这些...

    iReport生成二维码的案例

    在这个"iReport生成二维码的案例"中,我们将深入探讨如何利用iReport来生成二维码,这在现代信息化系统中是非常实用的一项功能,比如用于追踪、信息传递或作为移动应用的入口。 首先,我们需要了解二维码(Quick ...

    PB生成二维码(ocx控件)_二维码_

    本主题将详细讲解如何在PowerBuilder环境中利用OCX控件生成二维码。 首先,我们需要理解OCX(ActiveX Control)控件的概念。OCX是微软提出的一种组件技术,它允许开发者在Windows应用程序中嵌入和使用各种功能部件...

    java实现生成二维码(包括必要jar)

    在Java编程环境中,生成二维码是一项常见的任务,尤其在移动应用、数据交换和信息展示等领域有着广泛的应用。要实现这个功能,通常需要引入第三方库。在这个压缩包中,包含了一个名为"demo"的示例文件,这很可能是...

    nodejs实现超简单生成二维码的方法

    本文将介绍如何使用Node.js生成二维码,并且使用了qr-image这个插件来简化这一过程。 首先,qr-image插件是一个基于node-qrcode的分支,它允许用户快速生成二维码。由于原文中提到了node-qrcode插件在安装时需要...

    phpqrcode生成二维码

    这个版本可能包含了生成二维码所需的源代码、示例、文档等资源。 在使用 PHP QR Code 时,开发者需要了解以下几个核心概念: 1. **数据编码模式**:根据要编码的信息类型,QR Code 有几种不同的编码模式,如数字...

Global site tag (gtag.js) - Google Analytics