QRCode生成及读取
2 QRCode
urls
ReadQRCode.java
MYQRCodeImage
长宽公式……
CreateQRCode 结束
CreateQRCode-2 增加偏移量
CreateQRCode-2 汉字
CreateQRCode-2
CreateQRCode-1
2 QRCode links
生成: http://www.swetake.com/qrcode/index-e.html
读取; https://osdn.jp/projects/qrcode/
通过QRcode解析二维码
使用QRcode jar 生成和读取二维码 jar包地址
package imooc.QRcode;
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 com.swetake.util.Qrcode;
import java.util.Scanner;
public class creatQRcode {
public static void main(String[] args) {
Qrcode x = new Qrcode();//通过Qrcode这个jar包设置二维码的一些属性
x.setQrcodeErrorCorrect('M');//纠错等级为M级
x.setQrcodeEncodeMode('B');//N代表数字 A代表a-z B代表其他内容
/*
* Qrcode的版本号 1-40
* 从21x21(版本1),到177x177(版本40),每一版本符号比前一版本每边增加4个模块。
* */
int version=7;
x.setQrcodeVersion(version);
Scanner input=new Scanner(System.in);//创建Scanner对象
System.out.print("请输入信息:");
String qrData=input.nextLine();//获取用户输入的信息,并保存在变量中
//画的长度根据版本的不同,大小不同, 下面的长度计算公式固定
int width = 67+12*(version-1);
int height = 67+12*(version-1);
//BufferedImage.TYPE_INT_RGB 指定图片的RGB值为int型 的 8位
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
/*
* Graphics2D 是java的画图工具
* */
Graphics2D gs = bufferedImage.createGraphics();
gs.setBackground(Color.pink);//设置背景为白色
gs.setColor(Color.black);//设置颜色为黑色
gs.clearRect(0, 0, width, height);//存储画板的内容
int pixOff = 2;//偏移量
/*
* 往画板填充内容
*/
byte[] d =qrData.getBytes();
if (d.length>0 && d.length <120){
boolean[][] s = x.calQrcode(d);
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();
try {
ImageIO.write(bufferedImage, "png", new File("D:/code/辣鸡04.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
生成:
package com.jz.qrcode;
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 com.swetake.util.Qrcode;
/**
* 使用QRCode来生成二维码
* 生成原理:根据java GUI画图工具来生成
*
* */
public class CreatQRCode {
public static void main(String[] args) {
String qrData = "www.baidu.com";
Qrcode x = new Qrcode();
x.setQrcodeErrorCorrect('M');//纠错等级
x.setQrcodeEncodeMode('B');//N 数字 A a-z B代表其他内容
/*
* 版本 1-40
* 从21x21(版本1),到177x177(版本40),每一版本符号比前一版本每边增加4个模块。
* */
int version = 7;
x.setQrcodeVersion(version);
//画的长度根据版本的不同,大小不同, 下面的长度计算公式固定
int width = 67+12*(version-1);
int height = 67+12*(version-1);
//BufferedImage.TYPE_INT_RGB 指定图片的RGB 值为int型 的 8位
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
/*
* Graphics 绘图
*
* */
Graphics2D gs = bufferedImage.createGraphics();
gs.setBackground(Color.WHITE);
gs.setColor(Color.BLACK);
gs.clearRect(0, 0, width, height);
int pixff = 2;//偏移量
byte[] d =qrData.getBytes();
if (d.length>0 && d.length <120){
boolean[][] s = x.calQrcode(d);
for (int i=0;i<s.length;i++){
for (int j=0;j<s.length;j++){
if (s[j][i]) {
gs.fillRect(j*3+pixff,i*3+pixff,3,3);
}
}
}
}
gs.dispose();
bufferedImage.flush();
try {
ImageIO.write(bufferedImage, "png", new File("D:/baidu2_QRCode.png"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
识别:
package com.jz.qrcode;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import jp.sourceforge.qrcode.QRCodeDecoder;
/**
* QRCode 解析二维码信息
*
* */
public class ReaderQRCode {
public static void main(String[] args) {
File file = new File("D:/baidu2_QRCode.png");
BufferedImage bufferedImage;
try {
bufferedImage = ImageIO.read(file);
QRCodeDecoder codeDecoder = new QRCodeDecoder();
String result = new String(codeDecoder.decode(new MyQRCodeImage(
bufferedImage)),"gb2312");
System.out.println(result);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
接口:
package com.jz.qrcode;
import java.awt.image.BufferedImage;
import jp.sourceforge.qrcode.data.QRCodeImage;
public class MyQRCodeImage implements QRCodeImage {
BufferedImage bufferedImage;
public MyQRCodeImage(BufferedImage bufferedImage){
this.bufferedImage = bufferedImage;
}
@Override
public int getHeight() {
return bufferedImage.getHeight();
}
@Override
public int getPixel(int arg0, int arg1) {
return bufferedImage.getRGB(arg0, arg1);
}
@Override
public int getWidth() {
return bufferedImage.getWidth();
}
}
QRCode:
生成:http://www.swetake.com/qrcode/index-e.html
读取:https://osdn.jp/projects/qrcode