成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

慕課網(wǎng)_《Java生成二維碼》學習總結

QLQ / 644人閱讀

摘要:時間年月日星期五說明本文部分內容均來自慕課網(wǎng)。線性堆疊式二維碼示意圖矩陣式二維碼在一個矩形空間通過黑白像素在矩陣中的不同分布進行編碼。

時間:2017年06月23日星期五
說明:本文部分內容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com
教學示例源碼:無
個人學習源碼:https://github.com/zccodere/s...

第一章:二維碼的概念 1-1 二維碼概述

二維碼示意圖

使用場景

目錄

二維碼概念
二維碼發(fā)展歷史
二維碼分類
二維碼優(yōu)缺點
QR Code
示例講解

二維碼概念

二維條碼/二維碼(2-dimensional bar code)是用某種特定的幾何圖形按一定規(guī)律在平面(二位方向上)分布的黑白相間的圖形記錄數(shù)據(jù)符號信息的圖形。
第二章:二維碼發(fā)展歷史 2-1 二維碼發(fā)展歷史

發(fā)展歷史

一維條碼

一維條碼是由一組粗細不同、黑白(或彩色)相間的條、空及其相應的字符(數(shù)字字母)組成的標記,即傳統(tǒng)條碼。

一維條碼示意圖

二維條碼

二維條碼是用某種特定的幾何圖形按一定規(guī)律在平面(二維方向)上分布的條、空相間的圖形來記錄數(shù)據(jù)符號信息。

二維條碼示意圖

第三章:二維碼分類 3-1 二維碼分類

二維條碼也有許多不同的碼制,就碼制的編碼原理而言,通常分為三種類型:

1.線性堆疊式二維碼
2.矩陣式二維碼
3.郵政碼

線性堆疊式二維碼

編碼原理:建立在一維條碼基礎之上,按需要堆積成兩行或多行。

線性堆疊式二維碼示意圖

矩陣式二維碼

在一個矩形空間通過黑、白像素在矩陣中的不同分布進行編碼。
在矩陣相應元素位置上,用點(方點、圓點或其他形狀)的出現(xiàn)表示二進制“1”,點的不出現(xiàn)表示二進制的“0”

矩陣式二維碼示意圖

郵政碼

郵政碼通過不同長度的條進行編碼,主要用于郵件編碼,如:POSTNET、BPO 4-STATE
第四章:二維碼優(yōu)缺點 4-1 二維碼優(yōu)缺點

優(yōu)點

高密度編碼,信息容量大
    (多達1850個大寫字母或2710數(shù)字或1108個字節(jié)或500個漢字)
編碼范圍廣
    可以把圖片、文字、指紋,可以數(shù)字化的信息都可以進行編碼,用條碼顯示出來
容錯能力強
譯碼可靠性高
可引入加密措施
成本低、易制作、持久耐用

缺點

二維碼技術成為手機病毒、釣魚網(wǎng)站傳播的新渠道
信息泄露
第五章:QR Code 5-1 QR Code

目前流行的三大國際標準:

PDF417:不支持中文
DM:專利未公開,需支付專利費用
QR Code:專利公開,支持中文

QR Code比其他二維碼相比具有的優(yōu)勢

識讀速度快
數(shù)據(jù)密度大
占用空間小

QR Code是由日本Denso公司于1994年研制的一種矩陣二維碼符號嗎,全稱是Quick Response Code

示意圖

JSP生成二維碼的方法

借助第三方jar,如zxing和qrcodejar
Javascript,如jquery.qrcode.js
第六章:實例講解 6-1 實例講解前準備

zxing地址

https://github.com/zxing/zxing

Maven坐標



    com.google.zxing
    core
    3.3.0



    com.google.zxing
    javase
    3.3.0
6-2 使用zxing生成二維碼

代碼演示:

package com.myimooc.zxing;

import java.io.File;
import java.nio.file.Path;
import java.util.HashMap;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;

/**
 * 生成 二維碼
 * @author ZhangCheng on 2017-06-23
 */
public class CreateQRCode {

    public static void main(String[] args) {
        // 定義圖片的寬度和高度
        int width = 300;
        int height = 300;
        // 定義圖片的格式
        String format = "png";
        // 定義二維碼的內容
        String contents = "www.imooc.com";
        
        Path file = new File("D:/img.png").toPath();
        // 定義二維碼的參數(shù)
        HashMap hints = new HashMap();
        hints.put(EncodeHintType.CHARACTER_SET, "utf-8");// 設置字符編碼
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);// 設置容錯等級
        hints.put(EncodeHintType.MARGIN, 2);// 設置邊距(默認值5)
        
        // 生成二維碼
        try {
            BitMatrix bitMatrix = new MultiFormatWriter().encode(contents, BarcodeFormat.QR_CODE, width, height,hints);
            MatrixToImageWriter.writeToPath(bitMatrix, format, file);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
6-3 使用zxing進行二維碼解析

代碼演示:

package com.myimooc.zxing;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import javax.imageio.ImageIO;

import com.google.zxing.BinaryBitmap;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.NotFoundException;
import com.google.zxing.Result;
import com.google.zxing.client.j2se.BufferedImageLuminanceSource;
import com.google.zxing.common.HybridBinarizer;

/**
 * 讀取 二維碼
 * @author ZhangCheng on 2017-06-23
 */
public class ReadQRCode {

    @SuppressWarnings({ "unchecked", "rawtypes" })
    public static void main(String[] args) {
        
        MultiFormatReader formatReader = new MultiFormatReader();
        
        // 定義二維碼文件路徑
        File file = new File("D:/img.png");
        // 讀取圖片文件識別為一個圖片流
        BufferedImage image;
        try {
            image = ImageIO.read(file);

            BinaryBitmap binaryBitmap = 
                    new BinaryBitmap(
                    new HybridBinarizer(
                    new BufferedImageLuminanceSource(image)));
            // 定義二維碼的參數(shù)
            HashMap hints = new HashMap();
            hints.put(EncodeHintType.CHARACTER_SET, "utf-8");// 設置字符編碼
            // 解析二維碼
            Result result = formatReader.decode(binaryBitmap,hints);
            
            System.out.println("解析結果:"+result.toString());
            System.out.println("格式類型:"+result.getBarcodeFormat());
            System.out.println("文本內容:"+result.getText());
            
        } catch (IOException e) {
            e.printStackTrace();
        } catch (NotFoundException e) {
            e.printStackTrace();
        }
    }

}
6-4 使用QR Code方式生成和解析二維碼

QRCode

生成:http://www.swetake.com/qrcode/index-e.html
讀?。篽ttps://osdn.jp/projects/qrcode/

代碼演示

1.生成二維碼

package com.myimooc.qrcode;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

import com.swetake.util.Qrcode;

/**
 * 生成 二維碼 通過 Qrcode
 * 
 * @author ZhangCheng on 2017-06-23
 */
public class CreateQRCode {

    public static void main(String[] args) throws Exception {

        Qrcode x = new Qrcode();

        // 二維碼顯示的內容
        String qrData = "www.imooc.com";
        int version = 7;
        int width = 67 + 12 * (version - 1);
        int height = 67 + 12 * (version - 1);
        // 設置二維碼排錯率,可選L(7%)、M(15%)、Q(25%)、H(30%),排錯率越高可存儲的信息越少,但對二維碼清晰
        x.setQrcodeErrorCorrect("M");// 糾錯等級
        x.setQrcodeEncodeMode("B");// N代表數(shù)字,A代表z-Z,B代表其他字符
        // 設置設置版本號,取值范圍1-40,值越大尺寸越大,可存儲的信息越大
        x.setQrcodeVersion(version);

        BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
        Graphics2D gs = bufferedImage.createGraphics();
        // 設置屬性
        gs.setBackground(Color.WHITE);
        gs.setColor(Color.BLACK);
        gs.clearRect(0, 0, width, height);

        // 偏移量
        int pixoff = 2;

        byte[] d = qrData.getBytes("gb2312");
        if (d.length > 0 && d.length < 120) {
            boolean[][] s = x.calQrcode(d);

            for (int i = 0; i < s.length; i++) {
                for (int j = 0; j < s.length; j++) {
                    if (s[j][i]) {
                        gs.fillRect(j * 3 + pixoff, i * 3 + pixoff, 3, 3);
                    }
                }
            }
        }
        
        gs.dispose();
        bufferedImage.flush();
        
        ImageIO.write(bufferedImage, "png", new File("D:/qrcode.png"));
    }

}

2.讀取二維碼時,需實現(xiàn) QRCodeImage 接口

package com.myimooc.qrcode;

import java.awt.image.BufferedImage;

import jp.sourceforge.qrcode.data.QRCodeImage;

/**
 * 讀取 二維碼 時,需實現(xiàn) QRCodeImage 接口
 * 
 * @author ZhangCheng on 2017-06-23
 */
public class MyQRCodeImage implements QRCodeImage{
    
    BufferedImage bufferedImage;
    
    public MyQRCodeImage(BufferedImage bufferedImage){
        this.bufferedImage = bufferedImage;
    }
    
    @Override
    public int getHeight() {
        return bufferedImage.getHeight();
    }

    @Override
    public int getPixel(int arg0, int arg1) {
        return bufferedImage.getRGB(arg0, arg1);
    }

    @Override
    public int getWidth() {
        return bufferedImage.getWidth();
    }
    
    
    
}

3.讀取二維碼

package com.myimooc.qrcode;

import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;

import jp.sourceforge.qrcode.QRCodeDecoder;

/**
 * 讀取 二維碼 通過 Qrcode
 * 
 * @author ZhangCheng on 2017-06-23
 */
public class ReadQRCode {

    public static void main(String[] args) throws Exception {
        
        File file = new File("D:/qrcode.png");
        
        BufferedImage bufferedImage = ImageIO.read(file);
        
        QRCodeDecoder codeDecoder = new QRCodeDecoder();
        
        String result = new String(codeDecoder.decode(new MyQRCodeImage(bufferedImage)),"gb2312");
        
        System.out.println(result);
    }

}
6-5 jquery-qrcode生成二維碼

jquery-qrcode

地址:https://github.com/jeromeetienne/jquery-qrcode

代碼演示:





生成二維碼







生成的二維碼如下:

效果如下:

6-6 其他形式的二維碼

二維碼還可以這樣

6-7 二維碼擴展

為什么我們的二維碼掃描出來是文本而不是鏈接?

如何實現(xiàn)二維碼掃描安裝手機軟件?以慕課網(wǎng)為例

如何實現(xiàn)二維碼掃描名片?

VCard是標準通信薄基本格式

VCard規(guī)范

代碼實現(xiàn)

第七章:課程總結 7-1 總結

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/67213.html

相關文章

  • 課網(wǎng)_Java圖片驗證碼》學習總結

    時間:2017年07月09日星期日說明:本文部分內容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:概述 1-1 課程概述 主要內容 驗證碼歷史 課程內容 不同方案對比 設計與實現(xiàn) 總結 1-2 驗證碼歷史 驗證碼歷史 無驗證碼:垃圾騷擾 Luis von Ahn:Captcha 不斷...

    haitiancoder 評論0 收藏0
  • 課網(wǎng)_Java實現(xiàn)圖片等比例縮略圖》學習總結

    摘要:時間年月日星期六說明本文部分內容均來自慕課網(wǎng)??梢愿訉W⒂跇I(yè)務邏輯開發(fā),縮短項目開發(fā)周期,提高項目開發(fā)速度。 時間:2017年07月15日星期六說明:本文部分內容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程介紹 在用戶進行信息概略瀏覽的時候,提供縮...

    raledong 評論0 收藏0
  • 課網(wǎng)_《初識Java微信公眾號開發(fā)》學習總結

    摘要:時間年月日星期五說明本文部分內容均來自慕課網(wǎng)。本套課程介紹微信公眾號開發(fā),主要涉及公眾號介紹編輯模式介紹開發(fā)模式介紹等。慕課網(wǎng)是垂直的互聯(lián)網(wǎng)技能免費學習網(wǎng)站。 時間:2017年08月11日星期五說明:本文部分內容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學源碼:https://github.com/zccodere/s...學習源碼:https://github...

    PrototypeZ 評論0 收藏0
  • 課網(wǎng)_Java實現(xiàn)對稱加密》學習總結

    時間:2017年4月11日星期二說明:本文部分內容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學示例源碼:https://github.com/zccodere/s...個人學習源碼:https://github.com/zccodere/s... 第一章:對稱加密算法DES 1-1 JAVA對稱加密算法DES 加密密鑰=解密密鑰 對稱加密算法 初等 DES --3D...

    tomlingtm 評論0 收藏0
  • 課網(wǎng)_《JSON快速入門(Java版)》學習總結

    摘要:時間年月日星期日說明本文部分內容均來自慕課網(wǎng)。慕課網(wǎng)教學示例源碼無個人學習源碼第一章課程概述課程介紹課程須知本課程面向所有使用語言進行開發(fā)的小伙伴。 時間:2017年05月21日星期日說明:本文部分內容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學示例源碼:無個人學習源碼:https://github.com/zccodere/s... 第一章:課程概述 1-1 ...

    shiina 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<