Java解析二维码与生成二维码
public class JieDuErWerMa {
/**
* 解析二维码
* @param path :二维码路径
*/
public static void ErWeiCode(String path){
try {
//拿到二维码,用File接收文件
File file=new File(path);
//通过ImageIO来读取文件存储到内存
BufferedImage image=ImageIO.read(file);
//创建一个对象,将image交给他解析
BufferedImageLuminanceSource source=new BufferedImageLuminanceSource(image);
//由于计算机是由二进制建立的,so 需要转为二进制对象
HybridBinarizer nBinarizer=new HybridBinarizer(source);
BinaryBitmap bitmap=new BinaryBitmap(nBinarizer);
//解决乱码问题
HashMap hashMap=new HashMap<>();
hashMap.put(EncodeHintType.CHARACTER_SET, "UTF-8");
//解析
MultiFormatReader reader=new MultiFormatReader();
//接收解析后的结果
Result result=reader.decode(bitmap,hashMap);
//输出
System.out.println("二维码的格式类型: " + result.getBarcodeFormat());
System.out.println("二维码的内容: "+ result.getText());
} catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
/**
* 生成二维码
* @param string
* @throws Exception
*/
public static void CreateErWeiCode(String str) {
try {
//设置二维码的宽高
int width=300;
int height=300;
//设置二维码的内容
String content=str;
//设置二维码的格式
String format = "png";
//解决编码乱码问题:因为 JSP 默认取到的是iso-8859-1的,所以要先按iso-8859-1取出来,再转成utf-8
String contents=new String(content.getBytes("UTF-8"),"ISO-8859-1");
//定义二维码参数EncodeHinType 在我们的jar中已定义好的了
HashMap<EncodeHintType,Comparable> map=new HashMap();
//设置字符集编码,防止内容存在汉字乱码
map.put(EncodeHintType.CHARACTER_SET, "utf-8");
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height,map);
File outputFile = new File("C:\\Users\\Administrator\\Desktop\\new.png");
MatrixToImageWriter.writeToFile(bitMatrix, format, outputFile);
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
System.out.println("二维码生成成功!!");
}
}
需要使用的jar包
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.3.1</version>
</dependency>