码迷,mamicode.com
首页 > 编程语言 > 详细

java 生成二维码

时间:2018-10-31 13:59:34      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:ade   nts   tac   stack   encode   作用   except   case   bitmap   

生成二维码的工具类如下:

/**
* QrCodeUtil.java
* com.juyo.visa.common.util
* Copyright (c) 2017,
*/

package com.btzh.mis.dep.data.center.util;

import com.google.zxing.*;
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;
import lombok.Data;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

/**
* TODO(这里用一句话描述这个类的作用)
* <p>
* TODO(这里描述这个类补充说明 – 可选)
*
* @author
* @Date 2017年12月9日
*/
@Data
public class QrCodeUtil {

private String fileContextPath;

/**
* 得到32位的uuid
* @return
*/
public static String getUUID32(){
return UUID.randomUUID().toString().replace("-", "").toLowerCase();
}
/**
* 生成二维码
* <p>
* TODO(这里描述这个方法详情– 可选)
*
* @param content 二维码的内容
* @param filePath临时文件的路径
*/
public void encodeQrCode(String content, String filePath) {
try {
//需要创建一个临时文件,为了防止出现并发问题,现把二维码文件名用16为的UUID来命名
String fileName = getUUID32() + ".png";
int width = 300; //二维码图像宽度
int height = 300; // 二维码图像高度
String format = "png";// 图像类型
Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);// 生成矩阵
Path path = FileSystems.getDefault().getPath(filePath, fileName);
//由于生成二维码的方法没有返回值,现将二维码临时路径进行保存
this.fileContextPath = path.toString();
MatrixToImageWriter.writeToPath(bitMatrix, format, path);// 输出图像
//System.out.println("输出成功.");
} catch (Exception e) {
// TODO: handle exception
}
}
/**
* 解析二维码
*/
public void decodeQrCode(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);// 对图像进行解码
System.out.println("图片中内容: ");
System.out.println("author: " + result.getText());
System.out.println("图片中格式: ");
System.out.println("encode: " + result.getBarcodeFormat());
} catch (Exception e) {
e.printStackTrace();
}
}
}

2.测试

public static void main(String [] args){
QrCodeUtil qrCodeUtil = new QrCodeUtil();
//生成二维码的临时路径
String filepath = "D://pdfFile";
//生成二维码
qrCodeUtil.encodeQrCode("这里是二维码的内容", filepath);
//获取二维码临时文件的路径
String fileContextPath = qrCodeUtil.getFileContextPath();
//获取到二维码文件
File file = new File(fileContextPath);
System.out.println("生成了。。。");
}
/**
* QrCodeUtil.java
* com.juyo.visa.common.util
* Copyright (c) 2017,
*/

package com.btzh.mis.dep.data.center.util;

import com.google.zxing.*;
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;
import lombok.Data;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

/**
* TODO(这里用一句话描述这个类的作用)
* <p>
* TODO(这里描述这个类补充说明 – 可选)
*
* @author
* @Date 2017年12月9日
*/
@Data
public class QrCodeUtil {

private String fileContextPath;

/**
* 得到32位的uuid
* @return
*/
public static String getUUID32(){
return UUID.randomUUID().toString().replace("-", "").toLowerCase();
}
/**
* 生成二维码
* <p>
* TODO(这里描述这个方法详情– 可选)
*
* @param content 二维码的内容
* @param filePath临时文件的路径
*/
public void encodeQrCode(String content, String filePath) {
try {
//需要创建一个临时文件,为了防止出现并发问题,现把二维码文件名用16为的UUID来命名
String fileName = getUUID32() + ".png";
int width = 300; //二维码图像宽度
int height = 300; // 二维码图像高度
String format = "png";// 图像类型
Map<EncodeHintType, Object> hints = new HashMap<EncodeHintType, Object>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);// 生成矩阵
Path path = FileSystems.getDefault().getPath(filePath, fileName);
//由于生成二维码的方法没有返回值,现将二维码临时路径进行保存
this.fileContextPath = path.toString();
MatrixToImageWriter.writeToPath(bitMatrix, format, path);// 输出图像
//System.out.println("输出成功.");
} catch (Exception e) {
// TODO: handle exception
}
}
/**
* 解析二维码
*/
public void decodeQrCode(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);// 对图像进行解码
System.out.println("图片中内容: ");
System.out.println("author: " + result.getText());
System.out.println("图片中格式: ");
System.out.println("encode: " + result.getBarcodeFormat());
} catch (Exception e) {
e.printStackTrace();
}
}
}

java 生成二维码

标签:ade   nts   tac   stack   encode   作用   except   case   bitmap   

原文地址:https://www.cnblogs.com/wjxbk/p/9882267.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!