国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

QLQ / 638人閱讀

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

時(shí)間:2017年06月23日星期五
說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com
教學(xué)示例源碼:無(wú)
個(gè)人學(xué)習(xí)源碼:https://github.com/zccodere/s...

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

二維碼示意圖

使用場(chǎng)景

目錄

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

二維碼概念

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

發(fā)展歷史

一維條碼

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

一維條碼示意圖

二維條碼

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

二維條碼示意圖

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

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

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

線性堆疊式二維碼

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

線性堆疊式二維碼示意圖

矩陣式二維碼

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

矩陣式二維碼示意圖

郵政碼

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

優(yōu)點(diǎn)

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

缺點(diǎn)

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

目前流行的三大國(guó)際標(biāo)準(zhǔn):

PDF417:不支持中文
DM:專利未公開(kāi),需支付專利費(fèi)用
QR Code:專利公開(kāi),支持中文

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

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

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

示意圖

JSP生成二維碼的方法

借助第三方j(luò)ar,如zxing和qrcodejar
Javascript,如jquery.qrcode.js
第六章:實(shí)例講解 6-1 實(shí)例講解前準(zhǔn)備

zxing地址

https://github.com/zxing/zxing

Maven坐標(biāo)



    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";
        // 定義二維碼的內(nèi)容
        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");// 設(shè)置字符編碼
        hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.M);// 設(shè)置容錯(cuò)等級(jí)
        hints.put(EncodeHintType.MARGIN, 2);// 設(shè)置邊距(默認(rèn)值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進(jìn)行二維碼解析

代碼演示:

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");
        // 讀取圖片文件識(shí)別為一個(gè)圖片流
        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");// 設(shè)置字符編碼
            // 解析二維碼
            Result result = formatReader.decode(binaryBitmap,hints);
            
            System.out.println("解析結(jié)果:"+result.toString());
            System.out.println("格式類型:"+result.getBarcodeFormat());
            System.out.println("文本內(nèi)容:"+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
讀取:https://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;

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

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

        Qrcode x = new Qrcode();

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

        BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_BGR);
        Graphics2D gs = bufferedImage.createGraphics();
        // 設(shè)置屬性
        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.讀取二維碼時(shí),需實(shí)現(xiàn) QRCodeImage 接口

package com.myimooc.qrcode;

import java.awt.image.BufferedImage;

import jp.sourceforge.qrcode.data.QRCodeImage;

/**
 * 讀取 二維碼 時(shí),需實(shí)現(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;

/**
 * 讀取 二維碼 通過(guò) 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 二維碼擴(kuò)展

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

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

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

VCard是標(biāo)準(zhǔn)通信薄基本格式

VCard規(guī)范

代碼實(shí)現(xiàn)

第七章:課程總結(jié) 7-1 總結(jié)

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/67213.html

相關(guān)文章

  • 課網(wǎng)_Java圖片驗(yàn)證碼》學(xué)習(xí)總結(jié)

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

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

    摘要:時(shí)間年月日星期六說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。可以更加專注于業(yè)務(wù)邏輯開(kāi)發(fā),縮短項(xiàng)目開(kāi)發(fā)周期,提高項(xiàng)目開(kāi)發(fā)速度。 時(shí)間:2017年07月15日星期六說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:無(wú)學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程介紹 在用戶進(jìn)行信息概略瀏覽的時(shí)候,提供縮...

    raledong 評(píng)論0 收藏0
  • 課網(wǎng)_《初識(shí)Java微信公眾號(hào)開(kāi)發(fā)》學(xué)習(xí)總結(jié)

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

    PrototypeZ 評(píng)論0 收藏0
  • 課網(wǎng)_Java實(shí)現(xiàn)對(duì)稱加密》學(xué)習(xí)總結(jié)

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

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

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

    shiina 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<