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

資訊專欄INFORMATION COLUMN

PHP-生成二維碼(qr-code)

endless_road / 3155人閱讀

摘要:生成二維碼首先我們需要在項目中引入類文件,現(xiàn)在基本上是通過命名空間路徑的方式進行自動加載,它的位置位于擴展根目錄的文件中。

1.為什么要寫這篇文章

最近做項目要生成二維碼讓用戶做跳轉(zhuǎn),搜索了一下發(fā)現(xiàn)網(wǎng)上都是用一個叫做 phpqrcode 的擴展,在 github 上搜索了一下發(fā)現(xiàn)這個項目作者在6年前就已經(jīng)沒有維護了,百度的文章也是千篇一律的你復(fù)制我的我復(fù)制你的,所以只好在 github 上看看有沒有更好的關(guān)于 PHP 生成二維碼的擴展,之后找到了一個項目名稱為 qr-code 的擴展,感覺不錯,作者也一直在做維護,使用也是簡單方便。所以在這里把這個擴展的安裝使用說明一下,方便各位的開發(fā)。

qr-code 項目的github 地址為:qr-code

2.安裝 qr-code

這里我們通過composer 來安裝擴展,composer 也算是現(xiàn)在比較火的包管理工具了,如果對composer 不太了解的話,可以看下我以前的文章:

《php-composer的安裝與使用方法》

我的環(huán)境為 linux,我們鍵入以下命令來進行該擴展的安裝:

composer require endroid/qr-code

當(dāng)擴展安裝完畢后,我們就可以開始下面的操作了。

3.生成二維碼

首先我們需要在項目中引入qr-code 類文件,composer 現(xiàn)在基本上是通過psr-4 "命名空間": "路徑" 的方式進行自動加載,它的位置位于擴展根目錄的 composer.json 文件中。

好了,現(xiàn)在我們引入qr-code 類文件,并嘗試輸出一個簡單的二維碼。

use EndroidQrCodeQrCode;

// $content 一般為url地址 當(dāng)然也可以是文字內(nèi)容
$content = "http://www.baidu.com?rand=" . rand(1000, 9999);
$qrCode = new QrCode($content);
// 指定內(nèi)容類型
header("Content-Type: ".$qrCode->getContentType());
// 輸出二維碼
echo $qrCode->writeString();

好了,當(dāng)指定了內(nèi)容類型后,會直接在頁面輸出二維碼

那這種直接輸出的二維碼怎么應(yīng)用于項目中呢,一般都是直接寫在html 中的

這樣,就可以把二維碼顯示在頁面的任意位置了。當(dāng)然,我們也可以把它存入文件中,生成一個任意格式的圖片,比如說:

$qrCode->writeFile(__DIR__ . "/qrcode.png");

這樣我們就可以根據(jù)圖片路徑在頁面上展示二維碼了

4.簡單的示例文件以及常用參數(shù)介紹

這里,我貼出一個簡單的類處理文件,并介紹一下qr-code 常用的一些參數(shù)。

類文件:

namespace "命名空間";

use EndroidQrCodeErrorCorrectionLevel;
use EndroidQrCodeLabelAlignment;
use EndroidQrCodeQrCode;

class QrcodeComponent
{
    protected $_qr;
    protected $_encoding = "UTF-8";
    protected $_size = 300;
    protected $_logo = false;
    protected $_logo_url = "";
    protected $_logo_size = 80;
    protected $_title = false;
    protected $_title_content = "";
    protected $_generate = "display"; // display-直接顯示 writefile-寫入文件
    const MARGIN = 10;
    const WRITE_NAME = "png";
    const FOREGROUND_COLOR = ["r" => 0, "g" => 0, "b" => 0, "a" => 0];
    const BACKGROUND_COLOR = ["r" => 255, "g" => 255, "b" => 255, "a" => 0];

    public function __construct($config) {
        isset($config["generate"]) && $this->_generate = $config["generate"];
        isset($config["encoding"]) && $this->_encoding = $config["encoding"];
        isset($config["size"]) && $this->_size = $config["size"];
        isset($config["display"]) && $this->_size = $config["size"];
        isset($config["logo"]) && $this->_logo = $config["logo"];
        isset($config["logo_url"]) && $this->_logo_url = $config["logo_url"];
        isset($config["logo_size"]) && $this->_logo_size = $config["logo_size"];
        isset($config["title"]) && $this->_title = $config["title"];
        isset($config["title_content"]) && $this->_title_content = $config["title_content"];
    }

    /**
     * 生成二維碼
     * @param $content 需要寫入的內(nèi)容
     * @return array | page input
     */
    public function create($content) {
        $this->_qr = new QrCode($content);
        $this->_qr->setSize($this->_size);
        $this->_qr->setWriterByName(self::WRITE_NAME);
        $this->_qr->setMargin(self::MARGIN);
        $this->_qr->setEncoding($this->_encoding);
        $this->_qr->setErrorCorrectionLevel(ErrorCorrectionLevel::HIGH);
        $this->_qr->setForegroundColor(self::FOREGROUND_COLOR);
        $this->_qr->setBackgroundColor(self::BACKGROUND_COLOR);
        if ($this->_title) {
            $this->_qr->setLabel($this->_title_content, 16, "字體地址", LabelAlignment::CENTER);
        }
        if ($this->_logo) {
            $this->_qr->setLogoPath($this->_logo_url);
            $this->_qr->setLogoWidth($this->_logo_size);
            $this->_qr->setRoundBlockSize(true);
        }
        $this->_qr->setValidateResult(false);

        if ($this->_generate == "display") {
            // 前端調(diào)用 例:
            header("Content-Type: " . $this->_qr->getContentType());
            return $this->_qr->writeString();
        } else if ($this->_generate == "writefile") {
            return $this->_qr->writeString();
        } else {
            return ["success" => false, "message" => "the generate type not found", "data" => ""];
        }
    }

    /**
     * 生成文件
     * @param $file_name 目錄文件 例: /tmp
     * @return array
     */
    public function generateImg($file_name) {
        $file_path = $file_name . DS . uniqid() . "." . self::WRITE_NAME;

        if (!file_exists($file_name)) {
            mkdir($file_name, 0777, true);
        }

        try {
            $this->_qr->writeFile($file_path);
            $data = [
                "url" => $file_path,
                "ext" => self::WRITE_NAME,
            ];
            return ["success" => true, "message" => "write qrimg success", "data" => $data];
        } catch (Exception $e) {
            return ["success" => false, "message" => $e->getMessage(), "data" => ""];
        }
    }
}

使用方法:

use "命名空間";

$qr_url = "http://www.baidu.com?id=" . rand(1000, 9999);
$file_name = "/tmp";

// 直接輸出
$qr_code = new QrcodeComponent();
$qr_img = qr_code->create($qr_url);
echo $qr_img;

// 生成文件
$config = [
    "generate" => "writefile",
];
$qr_code = new QrcodeComponent($config);
$qr_img = $qr_code->create($qr_url);
$rs = $qr_code->generateImg($file_name);
print_r($rs);

常用參數(shù)解釋:

setSize - 二維碼大小 px
setWriterByName - 寫入文件的后綴名
setMargin - 二維碼內(nèi)容相對于整張圖片的外邊距
setEncoding - 編碼類型
setErrorCorrectionLevel - 容錯等級,分為L、M、Q、H四級
setForegroundColor - 前景色
setBackgroundColor - 背景色
setLabel - 二維碼標(biāo)簽
setLogoPath - 二維碼logo路徑
setLogoWidth - 二維碼logo大小 px

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

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

相關(guān)文章

  • Canvas 進階(二)寫一個生成帶logo的維碼npm插件

    摘要:背景最近接觸到的需求,前端生成一個帶企業(yè)的二維碼,并支持點擊下載它。 背景 最近接觸到的需求,前端生成一個帶企業(yè)logo的二維碼,并支持點擊下載它。 實現(xiàn) 在前面的文章有講到如何用 canvas 畫二維碼,在此基礎(chǔ)上再畫一個公司logo,并提供下載的方法供調(diào)用,再封裝成 npm 插件 模塊名稱: qrcode-with-logos github地址:https://github.com...

    Chaz 評論0 收藏0
  • PHP生成微信小程序維碼,可生成帶參數(shù)維碼

    摘要:微信小程序官方開放了個創(chuàng)建二維碼的接口,其中有一個是生成二維碼的,還有一個是葵花狀的小程序碼,我這里就用生成二維碼。 微信小程序官方開放了3個創(chuàng)建二維碼的接口,其中有一個是生成二維碼的,還有一個是葵花狀的小程序碼,我這里就用php生成二維碼。 首先要獲取Access_token 這個請求起來也是很容易的,微信開發(fā)文檔有請求接口:要把自己的小程序的APPID和APPSECRET獲取到 h...

    jsliang 評論0 收藏0
  • PHP生成微信小程序維碼,可生成帶參數(shù)維碼

    摘要:微信小程序官方開放了個創(chuàng)建二維碼的接口,其中有一個是生成二維碼的,還有一個是葵花狀的小程序碼,我這里就用生成二維碼。 微信小程序官方開放了3個創(chuàng)建二維碼的接口,其中有一個是生成二維碼的,還有一個是葵花狀的小程序碼,我這里就用php生成二維碼。 首先要獲取Access_token 這個請求起來也是很容易的,微信開發(fā)文檔有請求接口:要把自己的小程序的APPID和APPSECRET獲取到 h...

    afishhhhh 評論0 收藏0
  • PHP生成簡單維碼

    摘要:一二維碼在現(xiàn)實生活中經(jīng)常用的到,但二維碼如何生成的呢現(xiàn)在我們就開始學(xué)習(xí)啦二從網(wǎng)上下載相應(yīng)的工具包,鏈接下載解壓并放到項目目錄中去。代碼示例四我們可以利用二維碼生成電子名片,然后用微信掃碼功能就能得到名片信息了。 一 二維碼在現(xiàn)實生活中經(jīng)常用的到,但二維碼如何生成的呢?現(xiàn)在我們就開始學(xué)習(xí)啦! 二 從網(wǎng)上下載相應(yīng)的工具包,鏈接,下載解壓phpqrcode并放到項目目錄中去。 三 首先我們需...

    MkkHou 評論0 收藏0

發(fā)表評論

0條評論

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