java生成二维码
本文通过Java提供两种生成二维码以及解析二维码的方法
1.zxing
编码前准备:
- 下载zxing,下载后提取出core,javase中com文件夹下的文件自己打成jar包,供一会使用。zxing源码下载
- jdk版本:1.7及以上
import java.io.File;
import java.nio.file.Path;
import java.util.HashMap;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
/**
* 使用zxing生成二维码
*
* @author suny
*/
public class CreateQRcode {
public static void main(String[] args) {
// 定义二维码图片参数
int width = 300;
int height = 300;
String format = "jpg";
String content = "www.baidu.com";
// 定义二维码的参数
HashMap<EncodeHintType, Object> map = new HashMap<EncodeHintType, Object>();
// 定义二维码字符集
map.put(EncodeHintType.CHARACTER_SET, "utf-8");
// 纠错等级
map.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);
// 边距
map.put(EncodeHintType.MARGIN, 2);
/*
* content:二维码内容 format:二维码类型
*/
try {
// 生成二维码
BitMatrix bitmatrix = new MultiFormatWriter().encode(content,
BarcodeFormat.QR_CODE, width, height, map);
Path file = new File("E:/img.jpg").toPath();
MatrixToImageWriter.writeToPath(bitmatrix, format, file);
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.awt.image.BufferedImage;
import java.io.File;
import java.util.HashMap;
import javax.imageio.ImageIO;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;
/**
* 使用zxing解析二维码
* @author suny
*/
public class ReadQRcode {
public static void main(String[] args) {
try {
MultiFormatReader multiFormatReader = new MultiFormatReader();
File file = new File("E:/img.jpg");
// 读取文件识别成为一张图片
BufferedImage image = ImageIO.read(file);
BinaryBitmap binaryBitmap = new BinaryBitmap(new HybridBinarizer(
new BufferedImageLuminanceSource(image)));
// 定义二维码的参数
HashMap map = new HashMap();
// 定义二维码字符集
map.put(EncodeHintType.CHARACTER_SET, "utf-8");
Result result = multiFormatReader.decode(binaryBitmap, map);
System.out.println("解析结果:"+result.toString());
System.out.println("二维码格式:"+result.getBarcodeFormat());
System.out.println("二维码格式:"+result.getText());
} catch (Exception e) {
e.printStackTrace();
}
}
}
2.qrcode
编码前准备:
1. 下载qrcode生成包。qrcode生成包
2. 下载qrcode读取包。qrcode读取包
3. jdk版本:1.7及以上
/*
*created by2017年11月17日
*/
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生成二维码
*
* @author suny
*/
public class CreateQRcode {
public static void main(String[] args) throws IOException {
Qrcode x = new Qrcode();
x.setQrcodeErrorCorrect('M');// 纠错等级
x.setQrcodeEncodeMode('B');// M代表数字;A代表a-Z;B代表任意字符
x.setQrcodeVersion(7);// 版本
String qrData = "www.baidu.com";
// 规定尺寸
int width = 67 + 12 * (7 - 1);
int height = 67 + 12 * (7 - 1);
// 创建一个缓冲区图片
BufferedImage bufferedImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// Java提供的画图工具
Graphics2D gs = bufferedImage.createGraphics();
gs.setBackground(Color.WHITE);
gs.setColor(Color.BLACK);
// 清除画板内容
gs.clearRect(0, 0, width, height);
// 将文本转换成字节数
byte[] d = qrData.getBytes();
int pixoff = 2;// 偏移量
// 进行填充
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();
ImageIO.write(bufferedImage, "jpg", new File("E:/aa.jpg"));
System.out.println("生成成功");
}
}
/*
*created by2017年11月17日
*/
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import jp.sourceforge.qrcode.QRCodeDecoder;
/**
* 使用qrcode解析二维码
* @author sunyi
*/
public class ReadQRcode {
public static void main(String[] args) throws IOException {
File file = new File("E:/aa.jpg");
// 读取文件识别成为一张图片
BufferedImage image = ImageIO.read(file);
QRCodeDecoder codeDecoder = new QRCodeDecoder();
String rs = new String(codeDecoder.decode(new QRcodeImage_Test(image)));
System.out.println(rs);
}
}
/*
*created by2017年11月17日
*/
import java.awt.image.BufferedImage;
import jp.sourceforge.qrcode.data.QRCodeImage;
/**
*
* @author suny
*/
public class QRcodeImage_Test implements QRCodeImage {
BufferedImage image;
public QRcodeImage_Test(BufferedImage image) {
this.image = image;
}
@Override
public int getHeight() {
return image.getHeight();
}
@Override
public int getPixel(int arg0, int arg1) {
return image.getRGB(arg0, arg1);
}
@Override
public int getWidth() {
return image.getWidth();
}
}