Java如何生成读取条形码和二维码

本篇内容介绍了“Java如何生成读取条形码和二维码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

条形码

将宽度不等的多个黑条和白条,按照一定的编码规则排序,用以表达一组信息的图像标识符

Java如何生成读取条形码和二维码

通常代表一串数字 / 字母,每一位有特殊含义

一般数据容量30个数字 / 字母

二维码

用某种特定几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息

比一维条形码能存储更多信息,表示更多数据类型

能够存储数字 / 字母 / 汉字 / 图片等信息

可存储几百到几十KB字符

Zxing

Zxing主要是Google出品的,用于识别一维码和二维码的第三方库

主要类:

  • BitMatrix位图矩阵

  • MultiFormatWriter位图编写器

  • MatrixToImageWriter写入图片

Maven导入Zxing

<dependencies>
<!--https://mvnrepository.com/artifact/com.google.zxing/javase-->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.2.1</version>
</dependency>

<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>

生成一维码java

publicstaticvoidmain(String[]args){
generateCode(newFile("1dcode.png"),"1390351289",500,250);
}
/**
*@paramfile生成的文件名称
*@paramcode一维码存储的数据信息
*@paramwidth生成图片的宽度
*@paramheight生成图片的高度
*@returnvoid
**/
publicstaticvoidgenerateCode(Filefile,Stringcode,intwidth,intheight){
//定义位图矩阵BitMatrix
BitMatrixmatrix=null;
try{
//使用code_128格式进行编码生成100*25的条形码
MultiFormatWriterwriter=newMultiFormatWriter();

matrix=writer.encode(code,BarcodeFormat.CODE_128,width,height,null);
}catch(WriterExceptione){
e.printStackTrace();
}

//将位图矩阵BitMatrix保存为图片
try{
FileOutputStreamoutputStream=newFileOutputStream(file);
ImageIO.write(MatrixToImageWriter.toBufferedImage(matrix),"png",outputStream);
outputStream.flush();
outputStream.close();
}catch(Exceptione){
e.printStackTrace();
}
}

注意:一维码只能存储数字和字母,其他数据会报Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.0.0:exec (default-cli) on project MavenDemo: Command execution failed.错误java

读取一维码

publicstaticvoidmain(String[]args){
readCode(newFile("1dcode.png"));
}
/**
*@paramreadImage读取一维码图片名
*@returnvoid
**/
publicstaticvoidreadCode(FilereadImage){
try{
BufferedImageimage=ImageIO.read(readImage);
if(image==null){
return;
}
LuminanceSourcesource=newBufferedImageLuminanceSource(image);
BinaryBitmapbitmap=newBinaryBitmap(newHybridBinarizer(source));

Map<DecodeHintType,Object>hints=newHashMap<DecodeHintType,Object>();
hints.put(DecodeHintType.CHARACTER_SET,"gbk");
hints.put(DecodeHintType.PURE_BARCODE,Boolean.TRUE);
hints.put(DecodeHintType.TRY_HARDER,Boolean.TRUE);

Resultresult=newMultiFormatReader().decode(bitmap,hints);
System.out.println(result.getText());
}catch(Exceptione){
e.printStackTrace();
}
}

注意:当使用String类进行转码时,要使用Java.lang包的,Maven导包的时候会导入第三方Apache的String类

生成二维码

/**定义二维码的宽度*/
privatefinalstaticintWIDTH=300;
/**定义二维码的高度*/
privatefinalstaticintHEIGHT=300;
/**定义二维码的格式*/
privatefinalstaticStringFORMAT="png";

/**
*@paramfile
*@paramcontent
*@returnvoid
**/
publicstaticvoidgenerateQRCode(Filefile,Stringcontent){
//定义二维码参数
Map<EncodeHintType,Object>hints=newHashMap<EncodeHintType,Object>();
//设置编码
hints.put(EncodeHintType.CHARACTER_SET,"UTF-8");
//设置容错等级
hints.put(EncodeHintType.ERROR_CORRECTION,ErrorCorrectionLevel.M);
//设置边距,默认为5
hints.put(EncodeHintType.MARGIN,2);

try{
BitMatrixbitMatrix=newMultiFormatWriter()
.encode(content,BarcodeFormat.QR_CODE,WIDTH,HEIGHT,hints);
Pathpath=file.toPath();
//保存到项目跟目录中
MatrixToImageWriter.writeToPath(bitMatrix,FORMAT,path);
}catch(Exceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(String[]args){
generateQRCode(newFile("smt.png"),"淑玫唐家居网");
}

读取二维码

/**
*@paramfile读取二维码的文件名
*@returnvoid
**/
publicstaticvoidreadQRCode(Filefile){
MultiFormatReaderreader=newMultiFormatReader();
try{
BufferedImageimage=ImageIO.read(file);
BinaryBitmapbinaryBitmap=newBinaryBitmap(newHybridBinarizer(newBufferedImageLuminanceSource(image)));
Map<DecodeHintType,Object>hints=newHashMap<>();
hints.put(DecodeHintType.CHARACTER_SET,"UTF-8");
Resultresult=reader.decode(binaryBitmap,hints);
System.out.println("解析结果:"+newString(result.toString().getBytes("GBK"),"GBK"));
System.out.println("二维码格式:"+result.getBarcodeFormat());
System.out.println("二维码文本内容:"+newString(result.getText().getBytes("GBK"),"GBK"));
}catch(Exceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(String[]args){
readQRCode(newFile("smt.png"));
}

注意: Maven打印的控制台中会出现中文乱码,在IDEA Setting->maven->runner VMoptions:-Dfile.encoding=GB2312;即可解决

“Java如何生成读取条形码和二维码”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注恰卡编程网网站,小编将为大家输出更多高质量的实用文章!

发布于 2021-07-09 21:20:09
收藏
分享
海报
0 条评论
162
上一篇:小程序与后端Java接口交互实现HelloWorld 下一篇:java有哪些jsp内置对象
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码