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>生成一维码javapublic static void main(String[] args) {     generateCode(new File("1dcode.png"), "1390351289", 500, 250); } /**  * @param file    生成的文件名称  * @param code    一维码存储的数据信息  * @param width   生成图片的宽度  * @param height  生成图片的高度  * @return void  * */ public static void generateCode(File file, String code, int width, int height){     // 定义位图矩阵BitMatrix     BitMatrix matrix = null;     try {         // 使用code_128格式进行编码生成100*25的条形码         MultiFormatWriter writer = new MultiFormatWriter();         matrix = writer.encode(code, BarcodeFormat.CODE_128, width, height, null);     } catch (WriterException e) {         e.printStackTrace();     }     // 将位图矩阵BitMatrix保存为图片     try {         FileOutputStream outputStream = new FileOutputStream(file);         ImageIO.write(MatrixToImageWriter.toBufferedImage(matrix), "png", outputStream);         outputStream.flush();         outputStream.close();     } catch (Exception e) {         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

读取一维码public static void main(String[] args) {     readCode(new File("1dcode.png")); } /**  * @param readImage    读取一维码图片名  * @return void  * */ public static void readCode(File readImage) {     try {         BufferedImage image = ImageIO.read(readImage);         if (image == null) {             return;         }         LuminanceSource source = new BufferedImageLuminanceSource(image);         BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));         Map<DecodeHintType, Object> hints = new HashMap<DecodeHintType, Object>();         hints.put(DecodeHintType.CHARACTER_SET, "gbk");         hints.put(DecodeHintType.PURE_BARCODE, Boolean.TRUE);         hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);         Result result = new MultiFormatReader().decode(bitmap, hints);         System.out.println(result.getText());     } catch (Exception e) {         e.printStackTrace();     } }

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。