国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

[二維碼生成和解析][Java]

2019-11-14 14:50:49
字體:
供稿:網(wǎng)友

首先必須的jar包文件:百度云盤下載

 

Qrcode.jar    Qrcode_Swetake.jar 這兩個就是我們的主角

學(xué)習之前可以簡單了解一下:二維碼原理

新建javaPRoject    新建lib文件夾

將jar文件復(fù)制進去,選中jar文件右鍵BuildPath -- Add to BuildPath (旁白:這么簡單的操作你都還要講!)

進入正題:

 

代碼如下:    為方面同學(xué)理解 注釋較多 請理解  如感不適  請見諒 

(旁白:廢話太多了 我要看代碼!)

生成Qrcode代碼:

新建 QrcodeDemo.java

package qrcode;import java.awt.Color;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import java.io.UnsupportedEncodingException;import javax.imageio.ImageIO;import com.swetake.util.Qrcode;public class QrcodeDemo {    public static void main(String[] args) throws UnsupportedEncodingException {        Qrcode qrcode=new Qrcode();        //二維碼包含:數(shù)據(jù)和糾錯碼字:實際保存的二維碼信息,和糾錯碼字(用于修正二維碼損壞帶來的錯誤)        //格式信息:表示改二維碼的糾錯級別,分為L、M、Q、H        //錯誤修正容量        //L水平   7%的字碼可被修正          //M水平   15%的字碼可被修正          //Q水平   25%的字碼可被修正          //H水平   30%的字碼可被修正          //Qrcode有容錯能力,Qrcode圖形如果有破損,仍然可以被讀取內(nèi)容,最高可以到30%面積破損仍可被讀取。          //相對而言,容錯率愈高,Qrcode圖形面積愈大。        //所以一般折衷使用15%容錯能力 - 'M'        qrcode.setQrcodeErrorCorrect('M');                //B 以2進制形式 進行信息存儲        qrcode.setQrcodeEncodeMode('B');                //設(shè)置Qrcode版本         //QR碼符號共有40種規(guī)格的矩陣(一般為黑白色)        //從21x21(版本1),到177x177(版本40)        //每一版本符號比前一版本 每邊增加4個模塊        //常用版本為7 如支付寶版本        qrcode.setQrcodeVersion(7);                //創(chuàng)建圖片的存儲空間 - 流空間        BufferedImage img=new BufferedImage(140,140,BufferedImage.TYPE_INT_RGB);//常量 8位 顏色的圖片        //畫筆工具        Graphics2D g=img.createGraphics();        g.setBackground(Color.white);        g.clearRect(0, 0, 140, 140);        g.setColor(Color.black);                File file=new File("/Users/Summer/Desktop/二維碼.png");                //數(shù)據(jù)信息        String str="http://www.baidu.com";        byte[] data =str.getBytes();                //生成的cal        boolean[][] qrcodeDate=qrcode.calQrcode(data);                // 設(shè)置偏移量 不設(shè)置可能導(dǎo)致解析出錯         int offset=2;        for (int i = 0; i < qrcodeDate.length; i++) {            for (int j = 0; j < qrcodeDate.length; j++) {                /* 必須做判定 判定為true的部分進行打印*/                if(qrcodeDate[j][i]){//注意j i的位置  否則可能導(dǎo)致后續(xù)無法解析                                         //主意j i的位置 防止繪制錯誤                    g.fillRect(j*3+offset,i*3+offset,3,3);                /*                  * 以下尺寸合適,二維碼居中                 * 100*100 (j*2+5,i*2+5,3,3)                  * 140*140 (j*3+2,i*3+2,3,3)                  * 300*300 (j*6+15,i*6+15,6,6);                  */                }            }        }        //刷新        img.flush();        //釋放資源        g.dispose();        try {            //流寫入文件            ImageIO.write(img,"png",file);        } catch (IOException e) {            e.printStackTrace();        }    }}
QrcodeDemo.java

解析Qrcode:

新建 DecodeDemo.java 

package qrcode;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import javax.imageio.ImageIO;import jp.sourceforge.qrcode.QRCodeDecoder;import jp.sourceforge.qrcode.data.QRCodeImage;public class DecodeDemo {    public static void main(String[] args) {        BufferedImage img = null;        try {            //讀取到流中..            img = ImageIO.read(new File("/Users/Summer/Desktop/2維碼.png"));        } catch (IOException e) {            e.printStackTrace();        }        //QRCodeDecoder對象 進行解析操作        QRCodeDecoder qrcodeDecoder = new QRCodeDecoder();        //讀取數(shù)據(jù) byte[]        //注意該方法參數(shù) 需要QRCodeImage對象 自己寫對象實現(xiàn)和重寫        byte[] decodeByte = qrcodeDecoder.decode(new qrcodeImg(img));        String s  = new String(decodeByte);        System.out.println(s);    }}//實現(xiàn)QRCodeImageclass qrcodeImg implements QRCodeImage {    public BufferedImage img;    public qrcodeImg(BufferedImage img) {        this.img = img;    }    @Override    public int getHeight() {        return img.getHeight();    }    @Override    public int getPixel(int x, int y) {        return img.getRGB(x, y);    }    @Override    public int getWidth() {        return img.getWidth();    }}
DecodeDemo.java

當然大家也可以提取成工具類 (工具類:方便工作時隨意復(fù)制粘貼)


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 华阴市| 丹东市| 靖宇县| 麻阳| 乌拉特中旗| 新泰市| 旌德县| 泸溪县| 正阳县| 江阴市| 永寿县| 新营市| 乌海市| 徐水县| 辽中县| 潍坊市| 敦化市| 甘谷县| 常宁市| 隆化县| 竹山县| 绵阳市| 嘉义县| 镇宁| 本溪市| 呼伦贝尔市| 米易县| 崇礼县| 墨玉县| 叶城县| 星子县| 兴化市| 容城县| 栖霞市| 乌兰察布市| 富顺县| 红安县| 蓬安县| 赤水市| 景德镇市| 临朐县|