婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > PHP實現的創建帶logo圖標二維碼生成類詳解

PHP實現的創建帶logo圖標二維碼生成類詳解

熱門標簽:合肥外呼系統app 沈陽人工智能電銷機器人公司 智能外呼電銷系統 h5 地圖標注 拉薩打電話機器人 哈爾濱400電話辦理到易號網 電銷機器人-快迭智能 高識別電銷機器人 寶安400電話辦理

本文實例講述了PHP實現的創建帶logo圖標二維碼生成類。分享給大家供大家參考,具體如下:

這里介紹php實現創建二維碼類,支持設置尺寸,加入LOGO,描邊、圓角、透明度,等處理。提供完整代碼,演示實例及詳細參數說明,方便大家學習使用。

實現功能如下:

1.創建二維碼
2.加入logo到二維碼中
3.logo可描邊
4.logo可圓角
5.logo可設透明度
6.logo圖片及輸出圖片類型支持png,jpg,gif格式
7.可設置輸出圖片質量

設定參數說明:

ecc 二維碼質量 L-smallest, M, Q, H-best
size 二維碼尺寸 1-50
dest_file 生成的二維碼圖片路徑
quality 生成的圖片質量
logo logo路徑,為空表示不加入logo
logo_size logo尺寸,null表示按二維碼尺寸比例自動計算
logo_outline_size logo描邊尺寸,null表示按logo尺寸按比例自動計算
logo_outline_color logo描邊顏色
logo_opacity logo不透明度 0-100
logo_radius logo圓角角度 0-30

代碼如下:

PHPQRCode.class.php

?php
require_once dirname(__FILE__)."/qrcode/qrlib.php";
/**
 * PHP創建二維碼類
 * Date:  2018-03-18
 * Author: fdipzone
 * Version: 1.0
 *
 * Description:
 * PHP實現創建二維碼類,支持設置尺寸,加入LOGO,圓角,透明度,等處理。
 *
 * Func:
 * public set_config      設定配置
 * public generate       創建二維碼
 * private create_qrcode    創建純二維碼圖片
 * private add_logo       合拼純二維碼圖片與logo圖片
 * private image_outline    圖片對象進行描邊
 * private image_fillet     圖片對象進行圓角處理
 * private imagecopymerge_alpha 合拼圖片并保留各自透明度
 * private create_dirs     創建目錄
 * private hex2rgb       hex顏色轉rgb顏色
 * private get_file_ext     獲取圖片類型
 */
class PHPQRCode{ // class start
  /** 默認設定 */
  private $_config = array(
    'ecc' => 'H',            // 二維碼質量 L-smallest, M, Q, H-best
    'size' => 15,            // 二維碼尺寸 1-50
    'dest_file' => 'qrcode.png',    // 創建的二維碼路徑
    'quality' => 100,          // 圖片質量
    'logo' => '',            // logo路徑,為空表示沒有logo
    'logo_size' => null,        // logo尺寸,null表示按二維碼尺寸比例自動計算
    'logo_outline_size' => null,    // logo描邊尺寸,null表示按logo尺寸按比例自動計算
    'logo_outline_color' => '#FFFFFF', // logo描邊顏色
    'logo_opacity' => 100,       // logo不透明度 0-100
    'logo_radius' => 0,         // logo圓角角度 0-30
  );
  /**
   * 設定配置
   * @param Array  $config 配置內容
   */
  public function set_config($config){
    // 允許設定的配置
    $config_keys = array_keys($this->_config);
    // 獲取傳入的配置,寫入設定
    foreach($config_keys as $k=>$v){
      if(isset($config[$v])){
        $this->_config[$v] = $config[$v];
      }
    }
  }
  /**
   * 創建二維碼
   * @param String $data 二維碼內容
   * @return String
   */
  public function generate($data){
    // 創建臨時二維碼圖片
    $tmp_qrcode_file = $this->create_qrcode($data);
    // 合拼臨時二維碼圖片與logo圖片
    $this->add_logo($tmp_qrcode_file);
    // 刪除臨時二維碼圖片
    if($tmp_qrcode_file!=''  file_exists($tmp_qrcode_file)){
      unlink($tmp_qrcode_file);
    }
    return file_exists($this->_config['dest_file'])? $this->_config['dest_file'] : '';
  }
  /**
   * 創建臨時二維碼圖片
   * @param String $data 二維碼內容
   * @return String
   */
  private function create_qrcode($data){
    // 臨時二維碼圖片
    $tmp_qrcode_file = dirname(__FILE__).'/tmp_qrcode_'.time().mt_rand(100,999).'.png';
    // 創建臨時二維碼
    QRcode::png($data, $tmp_qrcode_file, $this->_config['ecc'], $this->_config['size'], 2);
    // 返回臨時二維碼路徑
    return file_exists($tmp_qrcode_file)? $tmp_qrcode_file : '';
  }
  /**
   * 合拼臨時二維碼圖片與logo圖片
   * @param String $tmp_qrcode_file 臨時二維碼圖片
   */
  private function add_logo($tmp_qrcode_file){
    // 創建目標文件夾
    $this->create_dirs(dirname($this->_config['dest_file']));
    // 獲取目標圖片的類型
    $dest_ext = $this->get_file_ext($this->_config['dest_file']);
    // 需要加入logo
    if(file_exists($this->_config['logo'])){
      // 創建臨時二維碼圖片對象
      $tmp_qrcode_img = imagecreatefrompng($tmp_qrcode_file);
      // 獲取臨時二維碼圖片尺寸
      list($qrcode_w, $qrcode_h, $qrcode_type) = getimagesize($tmp_qrcode_file);
      // 獲取logo圖片尺寸及類型
      list($logo_w, $logo_h, $logo_type) = getimagesize($this->_config['logo']);
      // 創建logo圖片對象
      switch($logo_type){ 
        case 1: $logo_img = imagecreatefromgif($this->_config['logo']); break; 
        case 2: $logo_img = imagecreatefromjpeg($this->_config['logo']); break; 
        case 3: $logo_img = imagecreatefrompng($this->_config['logo']); break; 
        default: return ''; 
      }
      // 設定logo圖片合拼尺寸,沒有設定則按比例自動計算
      $new_logo_w = isset($this->_config['logo_size'])? $this->_config['logo_size'] : (int)($qrcode_w/5);
      $new_logo_h = isset($this->_config['logo_size'])? $this->_config['logo_size'] : (int)($qrcode_h/5);
      // 按設定尺寸調整logo圖片
      $new_logo_img = imagecreatetruecolor($new_logo_w, $new_logo_h);
      imagecopyresampled($new_logo_img, $logo_img, 0, 0, 0, 0, $new_logo_w, $new_logo_h, $logo_w, $logo_h);
      // 判斷是否需要描邊
      if(!isset($this->_config['logo_outline_size']) || $this->_config['logo_outline_size']>0){
        list($new_logo_img, $new_logo_w, $new_logo_h) = $this->image_outline($new_logo_img);
      }
      // 判斷是否需要圓角處理
      if($this->_config['logo_radius']>0){
        $new_logo_img = $this->image_fillet($new_logo_img);
      }
      // 合拼logo與臨時二維碼
      $pos_x = ($qrcode_w-$new_logo_w)/2;
      $pos_y = ($qrcode_h-$new_logo_h)/2;
      imagealphablending($tmp_qrcode_img, true);
      // 合拼圖片并保留各自透明度
      $dest_img = $this->imagecopymerge_alpha($tmp_qrcode_img, $new_logo_img, $pos_x, $pos_y, 0, 0, $new_logo_w, $new_logo_h, $this->_config['logo_opacity']);
      // 生成圖片
      switch($dest_ext){
        case 1: imagegif($dest_img, $this->_config['dest_file'], $this->_config['quality']); break;
        case 2: imagejpeg($dest_img, $this->_config['dest_file'], $this->_config['quality']); break;
        case 3: imagepng($dest_img, $this->_config['dest_file'], (int)(($this->_config['quality']-1)/10)); break;
      } 
    // 不需要加入logo
    }else{
      $dest_img = imagecreatefrompng($tmp_qrcode_file);
      // 生成圖片
      switch($dest_ext){
        case 1: imagegif($dest_img, $this->_config['dest_file'], $this->_config['quality']); break;
        case 2: imagejpeg($dest_img, $this->_config['dest_file'], $this->_config['quality']); break;
        case 3: imagepng($dest_img, $this->_config['dest_file'], (int)(($this->_config['quality']-1)/10)); break;
      }
    }
  }
  /**
   * 對圖片對象進行描邊
   * @param Obj  $img 圖片對象
   * @return Array
   */
  private function image_outline($img){
    // 獲取圖片寬高
    $img_w = imagesx($img);
    $img_h = imagesy($img);
    // 計算描邊尺寸,沒有設定則按比例自動計算
    $bg_w = isset($this->_config['logo_outline_size'])? intval($img_w + $this->_config['logo_outline_size']) : $img_w + (int)($img_w/5);
    $bg_h = isset($this->_config['logo_outline_size'])? intval($img_h + $this->_config['logo_outline_size']) : $img_h + (int)($img_h/5);
    // 創建底圖對象
    $bg_img = imagecreatetruecolor($bg_w, $bg_h);
    // 設置底圖顏色
    $rgb = $this->hex2rgb($this->_config['logo_outline_color']);
    $bgcolor = imagecolorallocate($bg_img, $rgb['r'], $rgb['g'], $rgb['b']);
    // 填充底圖顏色
    imagefill($bg_img, 0, 0, $bgcolor);
    // 合拼圖片與底圖,實現描邊效果
    imagecopy($bg_img, $img, (int)(($bg_w-$img_w)/2), (int)(($bg_h-$img_h)/2), 0, 0, $img_w, $img_h);
    $img = $bg_img;
    return array($img, $bg_w, $bg_h);
  }
  /**
   * 對圖片對象進行圓角處理
   * @param Obj $img 圖片對象
   * @return Obj
   */
  private function image_fillet($img){
    // 獲取圖片寬高
    $img_w = imagesx($img);
    $img_h = imagesy($img);
    // 創建圓角圖片對象
    $new_img = imagecreatetruecolor($img_w, $img_h);
    // 保存透明通道
    imagesavealpha($new_img, true);
    // 填充圓角圖片
    $bg = imagecolorallocatealpha($new_img, 255, 255, 255, 127);
    imagefill($new_img, 0, 0, $bg);
    // 圓角半徑
    $r = $this->_config['logo_radius'];
    // 執行圓角處理
    for($x=0; $x$img_w; $x++){
      for($y=0; $y$img_h; $y++){
        $rgb = imagecolorat($img, $x, $y);
        // 不在圖片四角范圍,直接畫圖
        if(($x>=$r  $x=($img_w-$r)) || ($y>=$r  $y=($img_h-$r))){
          imagesetpixel($new_img, $x, $y, $rgb);
        // 在圖片四角范圍,選擇畫圖
        }else{
          // 上左
          $ox = $r; // 圓心x坐標
          $oy = $r; // 圓心y坐標
          if( ( ($x-$ox)*($x-$ox) + ($y-$oy)*($y-$oy) ) = ($r*$r) ){
            imagesetpixel($new_img, $x, $y, $rgb);
          }
          // 上右
          $ox = $img_w-$r; // 圓心x坐標
          $oy = $r;    // 圓心y坐標
          if( ( ($x-$ox)*($x-$ox) + ($y-$oy)*($y-$oy) ) = ($r*$r) ){
            imagesetpixel($new_img, $x, $y, $rgb);
          }
          // 下左
          $ox = $r;    // 圓心x坐標
          $oy = $img_h-$r; // 圓心y坐標
          if( ( ($x-$ox)*($x-$ox) + ($y-$oy)*($y-$oy) ) = ($r*$r) ){
            imagesetpixel($new_img, $x, $y, $rgb);
          }
          // 下右
          $ox = $img_w-$r; // 圓心x坐標
          $oy = $img_h-$r; // 圓心y坐標
          if( ( ($x-$ox)*($x-$ox) + ($y-$oy)*($y-$oy) ) = ($r*$r) ){
            imagesetpixel($new_img, $x, $y, $rgb);
          }
        }
      }
    }
    return $new_img;
  }
  // 合拼圖片并保留各自透明度
  private function imagecopymerge_alpha($dest_img, $src_img, $pos_x, $pos_y, $src_x, $src_y, $src_w, $src_h, $opacity){
    $w = imagesx($src_img);
    $h = imagesy($src_img);
    $tmp_img = imagecreatetruecolor($src_w, $src_h);
    imagecopy($tmp_img, $dest_img, 0, 0, $pos_x, $pos_y, $src_w, $src_h);
    imagecopy($tmp_img, $src_img, 0, 0, $src_x, $src_y, $src_w, $src_h);
    imagecopymerge($dest_img, $tmp_img, $pos_x, $pos_y, $src_x, $src_y, $src_w, $src_h, $opacity);
    return $dest_img;
  }
  /**
   * 創建目錄
   * @param String $path
   * @return Boolean
   */
  private function create_dirs($path){
    if(!is_dir($path)){
      return mkdir($path, 0777, true);
    }
    return true;
  }
  /** hex顏色轉rgb顏色
   * @param String $color hex顏色
   * @return Array
   */
  private function hex2rgb($hexcolor){
    $color = str_replace('#', '', $hexcolor);
    if (strlen($color) > 3) {
      $rgb = array(
        'r' => hexdec(substr($color, 0, 2)),
        'g' => hexdec(substr($color, 2, 2)),
        'b' => hexdec(substr($color, 4, 2))
      );
    } else {
      $r = substr($color, 0, 1) . substr($color, 0, 1);
      $g = substr($color, 1, 1) . substr($color, 1, 1);
      $b = substr($color, 2, 1) . substr($color, 2, 1);
      $rgb = array(
        'r' => hexdec($r),
        'g' => hexdec($g),
        'b' => hexdec($b)
      );
    }
    return $rgb;
  }
  /** 獲取圖片類型 
   * @param String $file 圖片路徑 
   * @return int 
   */ 
  private function get_file_ext($file){
    $filename = basename($file);
    list($name, $ext)= explode('.', $filename);
    $ext_type = 0;
    switch(strtolower($ext)){
      case 'jpg':
      case 'jpeg':
        $ext_type = 2;
        break;
      case 'gif':
        $ext_type = 1;
        break;
      case 'png':
        $ext_type = 3;
        break;
    }
    return $ext_type;
  }
} // class end
?>

demo.php

?php
require 'PHPQRCode.class.php';
$config = array(
    'ecc' => 'H',  // L-smallest, M, Q, H-best
    'size' => 12,  // 1-50
    'dest_file' => 'qrcode.png',
    'quality' => 90,
    'logo' => 'logo.jpg',
    'logo_size' => 100,
    'logo_outline_size' => 20,
    'logo_outline_color' => '#FFFF00',
    'logo_radius' => 15,
    'logo_opacity' => 100,
);
// 二維碼內容
$data = 'https://www.jb51.net/';
// 創建二維碼類
$oPHPQRCode = new PHPQRCode();
// 設定配置
$oPHPQRCode->set_config($config);
// 創建二維碼
$qrcode = $oPHPQRCode->generate($data);
// 顯示二維碼
echo 'img src="'.$qrcode.'?t='.time().'">';
?>

生成的二維碼圖片:

源碼下載地址:點擊此處本站下載

PS:這里再為大家推薦兩款二維碼相關在線工具供大家參考使用:

在線生成二維碼工具(加強版)
http://tools.jb51.net/transcoding/jb51qrcode

在線二維碼解碼識別工具
http://tools.jb51.net/transcoding/trans_qrcode

更多關于PHP相關內容感興趣的讀者可查看本站專題:《PHP圖形與圖片操作技巧匯總》、《PHP數組(Array)操作技巧大全》、《PHP數據結構與算法教程》、《php程序設計算法總結》、《PHP數學運算技巧總結》、《php字符串(string)用法總結》及《php常見數據庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

您可能感興趣的文章:
  • PHP生成二維碼與識別二維碼的方法詳解【附源碼下載】
  • PHP生成(支持多模板)二維碼海報代碼
  • PHP基于phpqrcode類生成二維碼的方法詳解
  • php實現生成帶二維碼圖片并強制下載功能
  • 微信小程序 PHP生成帶參數二維碼
  • php生成二維碼圖片方法匯總
  • php微信高級接口調用方法(自定義菜單接口、客服接口、二維碼)
  • php+laravel 掃碼二維碼簽到功能

標簽:張家口 梅州 林芝 山東 成都 威海 巴中 泰州

巨人網絡通訊聲明:本文標題《PHP實現的創建帶logo圖標二維碼生成類詳解》,本文關鍵詞  PHP,實現,的,創建,帶,logo,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《PHP實現的創建帶logo圖標二維碼生成類詳解》相關的同類信息!
  • 本頁收集關于PHP實現的創建帶logo圖標二維碼生成類詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲电影一区二区三区| 99久久99久久精品免费看蜜桃| 亚洲第一福利一区| 欧洲生活片亚洲生活在线观看| 亚洲男人的天堂一区二区| 欧美午夜一区二区三区| 日韩欧美国产麻豆| 亚洲国产精品99久久久久久久久| 无吗不卡中文字幕| 国产精品视频九色porn| 久久精品亚洲一区二区三区浴池| 亚洲一区二区三区视频在线| 亚洲国产裸拍裸体视频在线观看乱了 | av福利精品导航| 亚洲一区二区三区四区五区黄| 久久久久亚洲综合| 欧美一区永久视频免费观看| 黄页视频在线91| 久久精品av麻豆的观看方式| 国产精品久久久久久妇女6080| 91麻豆精品国产| 26uuu色噜噜精品一区二区| 国产凹凸在线观看一区二区| 免播放器亚洲一区| 蜜臀av性久久久久av蜜臀妖精| 日韩精品久久理论片| 日韩国产欧美视频| 久久99国产精品免费| 午夜视频一区在线观看| 丝袜美腿高跟呻吟高潮一区| 亚洲1区2区3区4区| 免费在线观看一区| 国产一区二区三区观看| 一本久道中文字幕精品亚洲嫩| 国产麻豆视频精品| 丁香一区二区三区| 色88888久久久久久影院野外| 色欧美88888久久久久久影院| 欧美亚洲高清一区二区三区不卡| 欧美色图片你懂的| 精品电影一区二区| 国产精品三级视频| 日韩—二三区免费观看av| 国产一区二区91| 99精品视频在线播放观看| 精品视频全国免费看| 国产亚洲一区二区三区四区| 亚洲欧美偷拍三级| 日产国产欧美视频一区精品| 激情综合色丁香一区二区| 99精品视频在线观看免费| 91精品国产综合久久精品性色| 26uuu欧美| 性感美女极品91精品| 成熟亚洲日本毛茸茸凸凹| 777奇米成人网| 97精品视频在线观看自产线路二| 国产日韩视频一区二区三区| 综合久久综合久久| 美女视频免费一区| 国产精品亚洲а∨天堂免在线| 99久久精品国产麻豆演员表| 欧美一区国产二区| 中文字幕一区二区三区不卡| 欧美人伦禁忌dvd放荡欲情| 国产成人精品www牛牛影视| 2024国产精品视频| 国产色爱av资源综合区| 国产偷v国产偷v亚洲高清| 一区二区三区四区av| 国产精品美女久久久久久久| 亚洲大片精品永久免费| 91网上在线视频| 欧美日本国产一区| 中文字幕亚洲在| 亚洲成人av一区二区三区| 国产精品资源在线| 欧美日韩一级二级| 亚洲欧美日韩国产中文在线| 亚洲sss视频在线视频| 91久久精品一区二区| 日韩亚洲欧美一区二区三区| 天天av天天翘天天综合网色鬼国产| 国产一区二区久久| 亚洲精品一线二线三线| 亚洲精品国产成人久久av盗摄| 国产福利精品导航| 8v天堂国产在线一区二区| 亚洲国产综合在线| av一区二区三区在线| 国产精品久久久久影院| 裸体歌舞表演一区二区| 91精选在线观看| 一级做a爱片久久| 欧美日韩在线播| 亚洲视频在线一区观看| 色狠狠色狠狠综合| 欧美激情一区三区| 成人久久18免费网站麻豆| 日韩精品一区二区三区视频| 亚洲一区二区在线播放相泽| 日产精品久久久久久久性色| 91精品国产综合久久香蕉麻豆| 亚洲日本丝袜连裤袜办公室| 狠狠色狠狠色综合日日91app| 欧美视频在线一区| 国产午夜精品理论片a级大结局| 精品影院一区二区久久久| 欧美精品日韩综合在线| 激情综合五月婷婷| 精品美女一区二区| 不卡的看片网站| 国产精品无圣光一区二区| 久久网站最新地址| 欧美吻胸吃奶大尺度电影| 欧美日韩精品一区二区三区| 国产成人鲁色资源国产91色综| 国产精品久久久久久久第一福利| 国产欧美一区二区精品性| 欧美mv和日韩mv国产网站| 91成人免费网站| 色乱码一区二区三区88| 日韩极品在线观看| 亚洲欧洲无码一区二区三区| 精品av综合导航| 精品盗摄一区二区三区| 日韩精品在线看片z| 欧美不卡视频一区| 精品国产91九色蝌蚪| 国产亚洲欧美日韩俺去了| 欧美r级电影在线观看| 久久久久久免费网| 欧美日韩一区不卡| 91丨porny丨蝌蚪视频| 99在线精品免费| 色国产精品一区在线观看| 亚洲一区二区三区美女| 欧美精品一区二区三| 日韩精品欧美精品| 欧美一级搡bbbb搡bbbb| 成人av午夜影院| 日韩精品久久久久久| 欧美一卡在线观看| 国产精一区二区三区| 欧美激情一区二区三区四区 | 欧美一区二区三区小说| 欧美一区二区三区啪啪| 中文字幕欧美一区| 免费看日韩a级影片| 国产精品女同一区二区三区| 最新高清无码专区| 精品国产sm最大网站免费看| 欧美精品一级二级| 国产女主播一区| 在线看不卡av| 国产欧美一区二区精品秋霞影院| 久久99精品国产91久久来源| 欧美日本一区二区三区| aa级大片欧美| 日本大胆欧美人术艺术动态| 精品国产伦理网| 91丨九色丨国产丨porny| 日韩av电影免费观看高清完整版在线观看 | 成人欧美一区二区三区| 在线视频综合导航| 国内精品伊人久久久久av影院| 国产精品成人网| 91精品久久久久久蜜臀| 欧美视频完全免费看| 国内久久婷婷综合| 一区二区在线看| 日韩精品一区二区三区swag| av高清久久久| 九九在线精品视频| 亚洲一区av在线| 国产成人av一区二区三区在线观看| 久久精品99国产精品| 伊人色综合久久天天人手人婷| 精品免费日韩av| 91精品婷婷国产综合久久性色| av在线不卡免费看| 激情综合网av| 免费观看在线色综合| 蜜臀精品一区二区三区在线观看| 亚洲摸摸操操av| 国产女人水真多18毛片18精品视频| 88在线观看91蜜桃国自产| 色94色欧美sute亚洲线路一久| 国产 日韩 欧美大片| 一区二区免费看| 日韩高清在线不卡| 亚洲高清免费视频| 亚洲手机成人高清视频| 国产精品久久久久影院| 国产欧美日韩视频一区二区| 日韩视频在线一区二区| 日韩欧美国产三级| 欧美一区二区在线免费观看| 6080午夜不卡| 日韩你懂的在线播放|