java生成二维码工具类
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/daochuwenziyao/article/details/72312431
如下为java生成二维码工具类,可以选择生成文件,或者直接在页面生成
-
import java.awt.image.BufferedImage;
-
import java.io.File;
-
import java.io.IOException;
-
import java.nio.file.FileSystems;
-
import java.util.HashMap;
-
import java.util.Map;
-
import javax.imageio.ImageIO;
-
import javax.servlet.http.HttpServletResponse;
-
import org.slf4j.Logger;
-
import org.slf4j.LoggerFactory;
-
import com.alibaba.fastjson.JSONObject;
-
import com.google.zxing.BarcodeFormat;
-
import com.google.zxing.Binarizer;
-
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.NotFoundException;
-
import com.google.zxing.Result;
-
import com.google.zxing.WriterException;
-
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;
-
/**
-
*
-
* 二维码工具类
-
* @see [相关类/方法]
-
* @since [产品/模块版本]
-
*/
-
public class QRCodeUtil
-
{
-
private static final Logger log = LoggerFactory.getLogger(QRCodeUtil.class);
-
/**
-
*
-
* 生成二维码文件测试
-
* @param filePath 文件路径
-
* @param fileName 文件名
-
* @param number 编号
-
* @param phone 手机号
-
* @see [类、类#方法、类#成员]
-
*/
-
public static void generatEncodeTest(String filePath, String fileName, String number, String phone)
-
{
-
int width = 200; // 图像宽度
-
int height = 200; // 图像高度
-
String format = "png";// 图像类型
-
JSONObject json = new JSONObject();
-
json.put("number",number);
-
json.put("phone", phone);
-
String content = json.toJSONString();// 内容
-
Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
-
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
-
try
-
{
-
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);// 生成矩阵
-
String path = FileSystems.getDefault().getPath(filePath, fileName).toString();
-
File file = new File(path);
-
MatrixToImageWriter.writeToFile(bitMatrix, format, file);// 输出图像
-
System.out.println("二维码输出成功");
-
System.out.println("图片地址:" + filePath + fileName);
-
System.out.println("---------------------------");
-
}
-
catch (WriterException e)
-
{
-
e.printStackTrace();
-
System.out.println("二维码输出异常");
-
}
-
catch (IOException e)
-
{
-
e.printStackTrace();
-
System.out.println("二维码输出异常");
-
}
-
}
-
/**
-
*
-
* 解析二维码内容测试
-
* @param filePath 二维码绝对路径
-
* @see [类、类#方法、类#成员]
-
*/
-
public static void parseDecodeTest(String filePath)
-
{
-
BufferedImage image;
-
try
-
{
-
image = ImageIO.read(new File(filePath));
-
LuminanceSource source = new BufferedImageLuminanceSource(image);
-
Binarizer binarizer = new HybridBinarizer(source);
-
BinaryBitmap binaryBitmap = new BinaryBitmap(binarizer);
-
Map<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();
-
hints.put(DecodeHintType.CHARACTER_SET, "UTF-8");
-
Result result = new MultiFormatReader().decode(binaryBitmap, hints);// 对图像进行解码
-
JSONObject content = JSONObject.parseObject(result.getText());
-
StringBuffer sb = new StringBuffer();
-
sb.append("编号:")
-
.append(content.getString("number"))
-
.append("\r\n")
-
.append("手机号码:")
-
.append(content.getString("phone"));
-
String returnText = sb.toString();
-
System.out.println(returnText);
-
}
-
catch (IOException e)
-
{
-
e.printStackTrace();
-
}
-
catch (NotFoundException e)
-
{
-
e.printStackTrace();
-
}
-
}
-
/**
-
*
-
* 生成二维码输出流
-
* 在jsp页面中直接展示时使用
-
* 无须保存 即生成即展示
-
* @param response
-
* @param number 编号
-
* @param phone 手机号
-
* @see [类、类#方法、类#成员]
-
*/
-
public static void generatEncode(HttpServletResponse response, String number, String phone)
-
{
-
JSONObject json = new JSONObject();
-
json.put("number",number);
-
json.put("phone", phone);
-
String content = json.toJSONString();// 内容
-
int width = 200; // 图像宽度
-
int height = 200; // 图像高度
-
String format = "png";// 图像类型
-
Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
-
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
-
try
-
{
-
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);// 生成矩阵
-
MatrixToImageWriter.writeToStream(bitMatrix, format, response.getOutputStream());// 输出图像
-
log.info("二维码输出成功");
-
}
-
catch (WriterException e)
-
{
-
e.printStackTrace();
-
log.error("二维码输出异常");
-
}
-
catch (IOException e)
-
{
-
e.printStackTrace();
-
log.error("二维码输出异常");
-
}
-
}
-
public static void main(String[] args)
-
{
-
generatEncodeTest("D:\\","zxing.png","001","13019931996");
-
parseDecodeTest("D:\\zxing.png");
-
}
-
}
Java生成二维码
2017年11月17日 22:18:13 孙百度 阅读数:199
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sun123_123/article/details/78565768
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();
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
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();
}
}