google zxing 生成和解析二维码

来源:互联网 发布:32岁学编程 编辑:程序博客网 时间:2024/05/23 20:04

maven 项目pom.xml文件配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.shihy</groupId>  <artifactId>qrcode</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>jar</packaging>  <name>qrcode</name>  <url>http://maven.apache.org</url>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  </properties>  <dependencies>     <dependency>              <groupId>com.google.zxing</groupId>              <artifactId>core</artifactId>              <version>3.0.0</version>         </dependency>            <dependency>              <groupId>com.google.zxing</groupId>              <artifactId>javase</artifactId>              <version>3.0.0</version>         </dependency>       <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>4.10</version>      <scope>test</scope>    </dependency>     <dependency>              <groupId>com.alibaba</groupId>              <artifactId>fastjson</artifactId>              <version>1.1.29</version>          </dependency>      </dependencies></project>


生成与解析二维码代码

package com.shihy.qrcode;import java.awt.image.BufferedImage;  import java.io.File;  import java.io.IOException;  import java.nio.file.FileSystems;  import java.nio.file.Path;  import java.util.HashMap;  import java.util.Map;    import javax.imageio.ImageIO;    import org.junit.Test;    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;    public class QRCodeTest {        /**      * 生成图像      *       * @throws WriterException      * @throws IOException      */      @Test      public void testEncode() throws WriterException, IOException {          String filePath = "D://";          String fileName = "zxing.png";          JSONObject json = new JSONObject();          json.put(                  "zxing",                  "https://github.com/zxing/zxing/tree/zxing-3.0.0/javase/src/main/java/com/google/zxing");          json.put("author", "shihy");          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");          BitMatrix bitMatrix = new MultiFormatWriter().encode(content,                  BarcodeFormat.QR_CODE, width, height, hints);// 设置生成什么类型的码,生成矩阵          Path path = FileSystems.getDefault().getPath(filePath, fileName);          MatrixToImageWriter.writeToPath(bitMatrix, format, path);// 输出图像          System.out.println("输出成功.");      }        /**      * 解析图像      */      @Test      public void testDecode() {          String filePath = "D://zxing.png";          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(result.getText());            JSONObject content = JSONObject.parseObject(result.getText());              System.out.println("图片中内容:  ");              System.out.println("author: " + content.getString("author"));              System.out.println("zxing:  " + content.getString("zxing"));              System.out.println("图片中格式:  ");              System.out.println("encode: " + result.getBarcodeFormat());          } catch (IOException e) {              e.printStackTrace();          } catch (NotFoundException e) {              e.printStackTrace();          }      }  }


注:

代码中的字符集utf-8必须小写,不能大写,否则生成的二维码无法被其他终端识别,具体原因请参见博文


用Zxing 的core和javase包生成二维码,手机端无法识别,求指导


参考博文:


http://kesun-shy.iteye.com/blog/2154169


 

 

本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1661937

0 0