博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QRCode.js 生成二维码
阅读量:6400 次
发布时间:2019-06-23

本文共 8028 字,大约阅读时间需要 26 分钟。

之前朋友问我关于二维码的,当时为了帮他我就去问问了前端的怎么编写的二维码。现在刚好我的项目里也需要设置二维码,刚好用上了。嘻嘻!

QRCode.js 是一个用于生成二维码图片的插件。

  去这里看吧!

我朋友用的是java编写的。很棒的!

1 package twoDimensionCode;    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.FileOutputStream;  8 import java.io.IOException;    9 import java.io.InputStream;   10 import java.io.OutputStream;   11    12 import javax.imageio.ImageIO;   13    14 import jp.sourceforge.qrcode.QRCodeDecoder;   15 import jp.sourceforge.qrcode.exception.DecodingFailedException;   16    17 import com.swetake.util.Qrcode;   18    19 public class TwoDimensionCode {   20        21     /**  22      * 生成二维码(QRCode)图片  23      * @param content 存储内容  24      * @param imgPath 图片路径  25      */   26     public void encoderQRCode(String content, String imgPath) {   27         this.encoderQRCode(content, imgPath, "png", 7);   28     }   29        30     /**  31      * 生成二维码(QRCode)图片  32      * @param content 存储内容  33      * @param output 输出流  34      */   35     public void encoderQRCode(String content, OutputStream output) {   36         this.encoderQRCode(content, output, "png", 7);   37     }   38        39     /**  40      * 生成二维码(QRCode)图片  41      * @param content 存储内容  42      * @param imgPath 图片路径  43      * @param imgType 图片类型  44      */   45     public void encoderQRCode(String content, String imgPath, String imgType) {   46         this.encoderQRCode(content, imgPath, imgType, 7);   47     }   48        49     /**  50      * 生成二维码(QRCode)图片  51      * @param content 存储内容  52      * @param output 输出流  53      * @param imgType 图片类型  54      */   55     public void encoderQRCode(String content, OutputStream output, String imgType) {   56         this.encoderQRCode(content, output, imgType, 7);   57     }   58    59     /**  60      * 生成二维码(QRCode)图片  61      * @param content 存储内容  62      * @param imgPath 图片路径  63      * @param imgType 图片类型  64      * @param size 二维码尺寸  65      */   66     public void encoderQRCode(String content, String imgPath, String imgType, int size) {   67         try {   68             BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);   69                70             File imgFile = new File(imgPath);   71             // 生成二维码QRCode图片   72             ImageIO.write(bufImg, imgType, imgFile);   73         } catch (Exception e) {   74             e.printStackTrace();   75         }   76     }   77    78     /**  79      * 生成二维码(QRCode)图片  80      * @param content 存储内容  81      * @param output 输出流  82      * @param imgType 图片类型  83      * @param size 二维码尺寸  84      */   85     public void encoderQRCode(String content, OutputStream output, String imgType, int size) {   86         try {   87             BufferedImage bufImg = this.qRCodeCommon(content, imgType, size);   88             // 生成二维码QRCode图片   89             ImageIO.write(bufImg, imgType, output);   90         } catch (Exception e) {   91             e.printStackTrace();   92         }   93     }   94        95     /**  96      * 生成二维码(QRCode)图片的公共方法  97      * @param content 存储内容  98      * @param imgType 图片类型  99      * @param size 二维码尺寸 100      * @return 101      */  102     private BufferedImage qRCodeCommon(String content, String imgType, int size) {  103         BufferedImage bufImg = null;  104         try {  105             Qrcode qrcodeHandler = new Qrcode();    106             // 设置二维码排错率,可选L(7%)、M(15%)、Q(25%)、H(30%),排错率越高可存储的信息越少,但对二维码清晰度的要求越小  107             qrcodeHandler.setQrcodeErrorCorrect('M');  108             qrcodeHandler.setQrcodeEncodeMode('B');  109             // 设置设置二维码尺寸,取值范围1-40,值越大尺寸越大,可存储的信息越大  110             qrcodeHandler.setQrcodeVersion(size);  111             // 获得内容的字节数组,设置编码格式  112             byte[] contentBytes = content.getBytes("utf-8");  113             // 图片尺寸  114             int imgSize = 67 + 12 * (size - 1);  115             bufImg = new BufferedImage(imgSize, imgSize, BufferedImage.TYPE_INT_RGB);  116             Graphics2D gs = bufImg.createGraphics();  117             // 设置背景颜色  118             gs.setBackground(Color.WHITE);  119             gs.clearRect(0, 0, imgSize, imgSize);  120   121             // 设定图像颜色> BLACK  122             gs.setColor(Color.BLACK);  123             // 设置偏移量,不设置可能导致解析出错  124             int pixoff = 2;  125             // 输出内容> 二维码  126             if (contentBytes.length > 0 && contentBytes.length < 800) {  127                 boolean[][] codeOut = qrcodeHandler.calQrcode(contentBytes);  128                 for (int i = 0; i < codeOut.length; i++) {  129                     for (int j = 0; j < codeOut.length; j++) {  130                         if (codeOut[j][i]) {  131                             gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);  132                         }  133                     }  134                 }  135             } else {  136                 throw new Exception("QRCode content bytes length = " + contentBytes.length + " not in [0, 800].");  137             }  138             gs.dispose();  139             bufImg.flush();  140         } catch (Exception e) {  141             e.printStackTrace();  142         }  143         return bufImg;  144     }  145       146     /** 147      * 解析二维码(QRCode) 148      * @param imgPath 图片路径 149      * @return 150      */  151     public String decoderQRCode(String imgPath) {  152         // QRCode 二维码图片的文件  153         File imageFile = new File(imgPath);  154         BufferedImage bufImg = null;  155         String content = null;  156         try {  157             bufImg = ImageIO.read(imageFile);  158             QRCodeDecoder decoder = new QRCodeDecoder();  159             content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8");   160         } catch (IOException e) {  161             System.out.println("Error: " + e.getMessage());  162             e.printStackTrace();  163         } catch (DecodingFailedException dfe) {  164             System.out.println("Error: " + dfe.getMessage());  165             dfe.printStackTrace();  166         }  167         return content;  168     }  169       170     /** 171      * 解析二维码(QRCode) 172      * @param input 输入流 173      * @return 174      */  175     public String decoderQRCode(InputStream input) {  176         BufferedImage bufImg = null;  177         String content = null;  178         try {  179             bufImg = ImageIO.read(input);  180             QRCodeDecoder decoder = new QRCodeDecoder();  181             content = new String(decoder.decode(new TwoDimensionCodeImage(bufImg)), "utf-8");   182         } catch (IOException e) {  183             System.out.println("Error: " + e.getMessage());  184             e.printStackTrace();  185         } catch (DecodingFailedException dfe) {  186             System.out.println("Error: " + dfe.getMessage());  187             dfe.printStackTrace();  188         }  189         return content;  190     }  191   192     public static void main(String[] args) {  193         String imgPath = "C:/zcpr.bmp";   //生成二维码图片存放的地址和名称194         //String encoderContent = "Hello 大大、小小,welcome to QRCode!" + "\nMyblog [ http://sjsky.iteye.com ]" + "\nEMail [ sjsky007@gmail.com ]";  195         String encoderContent = "http://www.baidu.com";  //二维码显示的内容196         197         TwoDimensionCode handler = new TwoDimensionCode();  198         handler.encoderQRCode(encoderContent, imgPath, "png");  199       try {  200           OutputStream output = new FileOutputStream(imgPath);  201           handler.encoderQRCode(encoderContent, output);  202       } catch (Exception e) {  203           e.printStackTrace();  204       }  205         System.out.println("========encoder success");  206           207           208         String decoderContent = handler.decoderQRCode(imgPath);  209         System.out.println("解析结果如下:");  210         System.out.println(decoderContent);  211         System.out.println("========decoder success!!!");  212     }  213 }

 

转载地址:http://apfea.baihongyu.com/

你可能感兴趣的文章
Jenkins 用户文档(目录)
查看>>
系统常见指标
查看>>
使用crond构建linux定时任务及日志查看
查看>>
地图绘制初探——基于maptalks的2.5D地图绘制
查看>>
SpringBoot2.0之七 实现页面和后台代码的热部署
查看>>
Git 仓库大扫除
查看>>
设计模式-单例模式
查看>>
es6基础0x014:WeakMap
查看>>
九种 “姿势” 让你彻底解决跨域问题
查看>>
php中mysqli 处理查询结果集总结
查看>>
你不知道的JavaScript运算符
查看>>
小程序开发注意事项
查看>>
ECMAScript7规范中的instanceof操作符
查看>>
Hadoop HDFS原理分析
查看>>
【webpack4】基本配置和入门api
查看>>
Mac使用ssh公钥登录Linux
查看>>
【366天】跃迁之路——程序员高效学习方法论探索系列(实验阶段124-2018.02.06)...
查看>>
POJ3070-Fibonacci(矩阵快速幂)
查看>>
[vue插件]基于vue2.x的电商图片放大镜插件
查看>>
标准的组件结构
查看>>