澳门新葡亰娱乐网站-www.142net-欢迎您

澳门新葡亰娱乐网站是因为你还没有找到一条正确的致富之路,www.142net是将所有的游戏都汇集在一起的官方平台,因为澳门新葡亰娱乐网站这个网站当中有着大量的游戏攻略,托IP定位技术,传达终端直接到达的精准传播方式。

生成二维码,Java生成与解析二维码

来源:http://www.bhtsgq.com 作者:计算机知识 人气:52 发布时间:2019-05-30
摘要:  1,下载jar包(QRCode.jar) 壹、下载帮忙二维码的jar包qrcode.jar和qrcode_生成二维码,Java生成与解析二维码。swetake.jar,   由于前3个月小鱼忙于实习和找职业,一向从马时间写博客(其实只

 

图片 1

1,下载jar包(QRCode.jar)

壹、下载帮忙二维码的jar包qrcode.jar和qrcode_生成二维码,Java生成与解析二维码。swetake.jar,

 

由于前3个月小鱼忙于实习和找职业,一向从马时间写博客(其实只是有一些懒罢了),千盼万盼的到底到了国庆节啦,终于能够能够写写博客啦。

maven依赖

  1. <dependency>

  2. <groupId>QRCode</groupId>

  3. <artifactId>QRCode</artifactId>

  4. <version>3.0</version>

  5. </dependency>

其中qrcode_swetake.jar用于生成二维码,rcode.jar用于剖析二维码,jar包下载地址(免积分):

好久没公布博客了,明天发了2个Java工具类,突然意识草稿箱竟然还也许有之前的存货,一次性发了!!!

闲谈非常的少说,前几天享受的是作者在慕课网络学到的小本事,用Java来扭转本人的贰维码。

二,编写实体类落成2维码的转移

2、创设J2SEImageGucas达成类,用于落实二维码图像接口QWranglerCodeImage

 

说实话,1开首观看那几个难题本人是壹脸懵逼的,哇,要用Java来生成二维码啊,会不会很复杂啊,假如学不会的话应该如何是好啊?各样种种的笔触不明所以的飘飞,几乎不用太拉杂啊。但骨子里看了随后才意识,真心轻巧。下边即是事无巨细疏解啦。

2维码工具类

  1. public class CreateQRCode {

    1. /**
  2. * 创建二维码

  3. * @param qrData 生成二维码中要存储的信息

  4. * @param path 二维码图片存储路径 eg:"D:/qrcode.png"

  5. * @throws Exception

  6. */

  7. public static boolean creatQrcode(String qrData, String path) {

  8. try {

  9. Qrcode qrcode = new Qrcode();

  10. qrcode.setQrcodeErrorCorrect('M');//纠错等级(分为L、M、H三个等级)

  11. qrcode.setQrcodeEncodeMode('B');//N代表数字,A代表a-Z,B代表其它字符

  12. qrcode.setQrcodeVersion(7);//版本

    1. //设置一下二维码的像素
  13. int width = 67 12 * (7 - 1);

  14. int height = 67 12 * (7 - 1);

  15. BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);

  16. //绘图

  17. Graphics2D gs = bufferedImage.createGraphics();

  18. gs.setBackground(Color.WHITE);

  19. gs.setColor(Color.BLACK);

  20. gs.clearRect(0, 0, width, height);//清除下画板内容

    1. //设置下偏移量,如果不加偏移量,有时会导致出错。
  21. int pixoff = 2;

    1. byte[] d = qrData.getBytes("utf-8");
  22. if (d.length > 0 && d.length < 120) {

  23. boolean[][] s = qrcode.calQrcode(d);

  24. for (int i = 0; i < s.length; i ) {

  25. for (int j = 0; j < s.length; j ) {

  26. if (s[j][i]) {

  27. gs.fillRect(j * 3 pixoff, i * 3 pixoff, 3, 3);

  28. }

  29. }

  30. }

  31. }

  32. gs.dispose();

  33. bufferedImage.flush();

  34. ImageIO.write(bufferedImage, "png", new File(path));

  35. return true;

  36. } catch (IOException e) {

  37. e.printStackTrace();

  38. return false;

  39. }

  40. }

    1. /**
  41. * 解析二维码

  42. *

  43. * @param imgPath 图片路径

  44. * @return

  45. */

  46. public static String decoderQRCode(String imgPath) {

  47. //QRCode 二维码图片的文件

  48. File imageFile = new File(imgPath);

  49. BufferedImage bufImg = null;

  50. String content = null;

  51. try {

  52. bufImg = ImageIO.read(imageFile);

  53. QRCodeDecoder decoder = new QRCodeDecoder();

  54. content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8");

  55. } catch (IOException e) {

  56. System.out.println("Error: " e.getMessage;

  57. e.printStackTrace();

  58. } catch (DecodingFailedException dfe) {

  59. System.out.println("Error: " dfe.getMessage;

  60. dfe.printStackTrace();

  61. }

  62. return content;

  63. }

    1. }
 1 package org.sasc.core.twobarcode;
 2 
 3 import java.awt.image.BufferedImage;
 4 
 5 import jp.sourceforge.qrcode.data.QRCodeImage;
 6 
 7 public class J2SEImageGucas implements QRCodeImage {
 8     BufferedImage image;
 9 
10     public J2SEImageGucas(BufferedImage image) {
11         this.image = image;
12     }
13 
14     public int getWidth() {
15         return image.getWidth();
16     }
17 
18     public int getHeight() {
19         return image.getHeight();
20     }
21 
22     public int getPixel(int x, int y) {
23         return image.getRGB(x, y);
24     }
25 }

 

第二步,为了生成二维码,必须用到三个jar包,就是叫做zxing的jar包,那么些zxing是github上的一个开源项目,能够直接在github上边下载,这里是切实下载网址。

贰维码基础类

  1. class TwoDimensionCodeImage implements QRCodeImage {

  2. //BufferedImage作用将一幅图片加载到内存中

  3. BufferedImage bufImg;

  4. public TwoDimensionCodeImage(BufferedImage bufImg) {

  5. this.bufImg = bufImg;

  6. }

    1. @Override
  7. public int getWidth() {

  8. return bufImg.getWidth();//返回像素宽度

  9. }

    1. @Override
  10. public int getHeight() {

  11. return bufImg.getHeight();//返回像素高度

  12. }

    1. @Override
  13. public int getPixel(int i, int i1) {

  14. return bufImg.getRGB(i, i1);//得到长宽值,即像素值,i,i1代表像素值

  15. }

  16. }

三、编写生成二维码的方法encode和解析二维码的法子decode

目录 一.二维码定义  贰.贰维码腾飞历史  叁.贰维码分类  4.2维码优缺点  **5.QR Code**

3.controller调用

  1. package com.st.project.controller;

    1. import com.st.project.common.AjaxResult;
  2. import org.springframework.beans.factory.annotation.Value;

  3. import org.springframework.stereotype.Controller;

  4. import org.springframework.web.bind.annotation.PostMapping;

  5. import org.springframework.web.bind.annotation.RequestMapping;

  6. import org.springframework.web.bind.annotation.ResponseBody;

    1. import javax.servlet.http.HttpServletRequest;
    1. import static com.st.project.common.CreateQRCode.creatQrcode;
  7. import static com.st.project.common.CreateQRCode.decoderQRCode;

    1. /**
  8. * 创建二维码

  9. */

  10. @Controller

  11. @RequestMapping("/qrcode")

  12. public class QrcodeController {

  13. @Value("${portals.upload.image.path}")

  14. private String qrcodePath; //二维码存储路径

    1. /**
  15. * 创建二维码

  16. * @return

  17. */

  18. @ResponseBody

  19. @PostMapping("/add.dd")

  20. public AjaxResult addQrcode(HttpServletRequest request){

  21. AjaxResult ajaxResult = new AjaxResult();

  22. ajaxResult.setState(false);

  23. String qrData=request.getParameter("qrData");

  24. String qrSuffix=request.getParameter("qrSuffix");

  25. String qrcode=System.currentTimeMillis() "." qrSuffix;

  26. String path=qrcodePath qrcode;

  27. boolean getQrcode=creatQrcode(qrData,path);

  28. if(getQrcode==true){

  29. ajaxResult.setState(true);

  30. ajaxResult.setData(qrcode);

  31. }

  32. return ajaxResult;

  33. }

    1. /**
  34. * 解析二维码

  35. * @return

  36. */

  37. @ResponseBody

  38. @PostMapping("/decoder.dd")

  39. public AjaxResult decoderQrcode(HttpServletRequest request){

  40. AjaxResult ajaxResult = new AjaxResult();

  41. ajaxResult.setState(false);

  42. String qrcode=request.getParameter("qrcode");

    1. String qrData=decoderQRCode(qrcodePath qrcode);
  43. if(qrData!=null && !"".equals(qrData)){

  44. ajaxResult.setState(true);

  45. ajaxResult.setData(qrData);

  46. }

  47. return ajaxResult;

  48. }

    1. }

那会儿已生成一张名叫qrcode.png的二维码图片:

图片 2

  1 package org.sasc.core.twobarcode;
  2 
  3 import java.awt.Color;
  4 import java.awt.Graphics2D;
  5 import java.awt.image.BufferedImage;
  6 import java.io.File;
  7 import java.io.IOException;
  8 
  9 import javax.imageio.ImageIO;
 10 
 11 import org.apache.log4j.Logger;
 12 
 13 import com.swetake.util.Qrcode;
 14 
 15 import jp.sourceforge.qrcode.QRCodeDecoder;
 16 
 17 public class CreateQRCode {
 18     private static final Logger log = Logger.getLogger(CreateQRCode.class);
 19 
 20     /**
 21      * 生成二维码
 22      * 
 23      * @param srcValue 二维码内容
 24      * @param qrcodePicfilePath 生成路径及二维码图片名称
 25      * @return
 26      * @author muxiaoyou
 27      */
 28     private static boolean encode(String srcValue, String qrcodePicfilePath) {
 29         int MAX_DATA_LENGTH = 200;
 30         byte[] d = srcValue.getBytes();
 31         int dataLength = d.length;
 32         int imageWidth = 139;//宽度为139像素
 33         int imageHeight = imageWidth;//长度也为139像素,即此二维码为139*139像素
 34         BufferedImage bi = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_INT_RGB);
 35 
 36         Graphics2D g = bi.createGraphics();
 37         g.setBackground(Color.WHITE);
 38         g.clearRect(0, 0, imageWidth, imageHeight);
 39         g.setColor(Color.BLACK);
 40 
 41         if (dataLength > 0 && dataLength <= MAX_DATA_LENGTH) {
 42             //QR码的最大容量取决于选择的版本、纠错级别和编码模式(Mode:数字、字符、多字节字符等)
 43             Qrcode qrcode = new Qrcode();
 44             qrcode.setQrcodeErrorCorrect('M');//设置容错率为M
 45             qrcode.setQrcodeEncodeMode('B');//设置二维码加密模式为B
 46             qrcode.setQrcodeVersion(7);//设置二维码模式为7,取值范围为1到40,值越大所能包含的字符信息量越大
 47             boolean[][] b = qrcode.calQrcode(d);
 48             int qrcodeDataLen = b.length;
 49             for (int i = 0; i < qrcodeDataLen; i  ) {
 50                 for (int j = 0; j < qrcodeDataLen; j  ) {
 51                     if (b[j][i]) {
 52                         g.fillRect(j * 3   2, i * 3   2, 3, 3);
 53                     }
 54                 }
 55             }
 56             log.info("二维码生成完成!!");
 57         } else {
 58             log.info(dataLength   "大于"   MAX_DATA_LENGTH);
 59             return false;
 60         }
 61         g.dispose();
 62         bi.flush();
 63         
 64         File f = new File(qrcodePicfilePath);
 65         if(!f.exists()){
 66             f.mkdirs();
 67         }
 68         String suffix = f.getName().substring(f.getName().indexOf(".")   1, f.getName().length());
 69         try {
 70             ImageIO.write(bi, suffix, f);
 71             log.info("二维码输出成功!!");
 72         } catch (IOException ioe) {
 73             log.info("二维码生成失败"   ioe.getMessage());
 74             return false;
 75         }
 76         return true;
 77     }
 78     
 79     /**
 80      * 解析二维码
 81      * @param qrcodePicfilePath 二维码图片路径
 82      * @return
 83      * @author muxiaoyou
 84      */
 85     private static String decode(String qrcodePicfilePath) {
 86         log.info("开始解析二维码!!");
 87         /* 读取二维码图像数据 */
 88         File imageFile = new File(qrcodePicfilePath);
 89         BufferedImage image = null;
 90         try {
 91             image = ImageIO.read(imageFile);
 92         } catch (IOException e) {
 93             log.info("读取二维码图片失败: "   e.getMessage());
 94             return null;
 95         }
 96         /* 解析二维码 */
 97         QRCodeDecoder decoder = new QRCodeDecoder();
 98         String decodedData = new String(decoder.decode(new J2SEImageGucas(image)));
 99         log.info("解析内容如下:"   decodedData);
100         return decodedData;
101     }
102     
103     /**
104      * 程序入口
105      */
106     public static void main(String[] args) {
107         String data = "文档编号:Document-967-9301;文档名称:普通文档";
108         /**
109          * 生成二维码
110          */
111         CreateQRCode.encode(data, "D:/twoBarCodeImagessss/文档Document.JPG");
112         /**
113          * 解析二维码
114          */
115         CreateQRCode.decode("D:/twoBarCodeImagessss/文档Document.JPG");
116     }
117 
118 }

 

而第三步,就是构建jar包了,因为在github下边下载下来的zxing项目只是源码,还不是jar包,所以应该团结先用eclipse将这个源码导出为jar包。上面正是具体步骤了:一、在eclipse中新建1个工程,名字随意,这里本身取为德姆o。

 

 壹.贰维码又称  2维条码 (二-dimensional bar code)是用某种特定的几何图形按自然规律在平面(二维码上)布满的黑白相间的图片记录数据符号音讯的图纸。

图片 3

2贰维码发展历史

2、一.下载的zxing压缩包解压后的公文如下,将core和javase七个文件夹里面的代码拷到德姆o工程中。(core中只要main文件下的代码)

 一.20世纪20年份 约翰科芒德实现邮政单据自动分类方法,

图片 4图片 5

 二.一9伍零年U.S.乔 伍德兰德 伯尼西尔沃发明第一个条码专利,

二.拷完未来开掘报错了!啊,作者驾驭程序猿都特地痛恨红叉叉,可是并非那么紧张,放宽心将它们打包就好,如下所示。

 三.一九伍6年 吉拉德 费伊塞尔申请了用条形码表示数字的专利,

图片 6图片 7

 四.60年间 西尔沃尼亚表明一(Wissu)套条形码系统并在北美铁路体系成功选择,

3、高兴的打包完事后就足以伊始确实的写代码啦。

 伍.70年间,UPC码(Universal Product Code)在北美百货公司获得分布应用,

 public class QRCode { public static void main(String[] args){ //设置二维码宽度 int width = 300; //设置二维码高度 int height = 300; //设置图片格式 String format = "png"; //设置二维码的信息内容,就是扫了二维码后出现的东西,这里是一个链接 String content ="http://www.baidu.com"; createQRcode(width, height, format, content); }} private static void createQRcode(int width, int height, String format,String content) { // 设置下二维码的参数 Map hint = new HashMap(); // 设置二维码的编码格式 hint.put(EncodeHintType.CHARACTER_SET, "utf-8"); // 设置二维码的纠错等级,等级越高,可存储的数据量就越少 // L,M,Q,H这四个值等级依次有低到高 hint.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M); // 设置二维码的边距,也就是外面的空白边框大小 hint.put(EncodeHintType.MARGIN, 2); try { BitMatrix bitMatrix = new MultiFormatWriter().encode(content,BarcodeFormat.QR_CODE, width, height, hint); Path a = new File("D:/morning/mor.png").toPath(); MatrixToImageWriter.writeToPath(bitMatrix, format, a); } catch (WriterException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}

 陆.1987年中华起家了中国货色编码中心,80年份未外国研制出二维码,

④.写完代码后只要点击运维,就能够转移你想要的二维码啦,无论是用二维码直接张开网站链接,大概是扫码安装软件,大家都能够随意,是还是不是很棒呢?

 7.一996年到2000年分明了国标

万一喜欢或感觉小鱼的作品不错的话,不要遗忘点下喜欢哦。

三.2维码分类

 

图片 8

 

本文由澳门新葡亰发布于计算机知识,转载请注明出处:生成二维码,Java生成与解析二维码

关键词: Java 二维码 Other 第三方新应用

上一篇:【普京娱乐】入门系列一,入门系列七

下一篇:没有了

最火资讯