## 依賴的庫
之前有個項目用做了掃描槍用的條形碼生成。
就給大家演示下。
官網是<http://www.barcodephp.com>

下載了最新版。
然后我們把這種第三方庫放入vendor里去

注意不同的碼類型使用對應不同的class。
## 效果

大家可以修改生成的文本 參數 text。我演示的是code39。
## 實現代碼
具體文件 隨書項目 yang_book/examples/startup/BarcodeController.php
~~~
public function index(){
$class_dir = VENDOR_PATH.'barcodegen/class/';
// dump(is_file(VENDOR_PATH.'barcodegen/html/header.php'));
// die;
require($class_dir.'BCGFont.php');
require($class_dir.'BCGColor.php');
require($class_dir.'BCGDrawing.php');
// Including the barcode technology
include($class_dir.'BCGcode39.barcode.php');
// Loading Font
$font = new \BCGFont($class_dir.'font/Arial.ttf', 18);
// The arguments are R, G, B for color.
$color_black = new \BCGColor(0, 0, 0);
$color_white = new \BCGColor(255, 255, 255);
$code = new \BCGcode39();
$code->setScale(2); // Resolution
$code->setThickness(30); // Thickness
$code->setForegroundColor($color_black); // Color of bars
$code->setBackgroundColor($color_white); // Color of spaces
$code->setFont($font); // Font (or 0)
$code->parse(I('text', 'HELLO')); // Text
/* Here is the list of the arguments
1 - Filename (empty : display on screen)
2 - Background color */
$drawing = new \BCGDrawing('', $color_white);
$drawing->setBarcode($code);
$drawing->draw();
// Header that says it is an image (remove it if you save the barcode to a file)
header('Content-Type: image/png');
// Draw (or save) the image into PNG format.
$drawing->finish(\BCGDrawing::IMG_FORMAT_PNG);
}
~~~
其實就是改了原來的示列。
值得注意的是對于第三方類庫的引用。
我們有幾種加載第三方類庫的方式:命名空間、import、vendor、
原生include和require
1. 命名空間適合于獨立類,或者說這個類的構造方法處理其他文件的加載。常見的如ThinkPHP/Libary/Think下的所有類 如Upload、Page。
2. import適合默認類名符合tp類的規范即后綴是`.class.php`。import時系統會自動識別導入類庫文件的位置,ThinkPHP可以自動識別的類庫包包括Think、Org、Com、Behavior和Vendor包,以及Library目錄下面的子目錄 當然支持自定義位置和.php后綴,就是使用比較麻煩。
3. vendor 如果你的第三方類庫都放在Vendor目錄下面,并且都以.php為類文件后綴,也沒用采用命名空間的話,那么可以使用系統內置的Vendor函數簡化導入。
4. 原生require 或include 這里注意 路徑字符串中的 './'不是當前文件位置而是框架入口。為了防止出錯,我們也可以借用系統路徑常量 如APP_PATH、VENDOR_PATH 來拼接。
載入一個類,如果報錯了。怎么調試?我們可以通過將路徑拼接到一個變量里。然后用is_file去判斷:
如上面代碼里的: `// dump(is_file(VENDOR_PATH.'barcodegen/html/header.php'));`
其實文件路徑問題其實就是這么簡單。
還有一個注意點,有的時候相對路徑可能會報錯,我們需要將其用realpath轉換成全路徑去對比。還有windows下路徑中文要轉gbk編碼的問題。
## 效果

- 序
- 前言
- 內容簡介
- 目錄
- 基礎知識
- 起步
- 控制器
- 模型
- 模板
- 命名空間
- 進階知識
- 路由
- 配置
- 緩存
- 權限
- 擴展
- 國際化
- 安全
- 單元測試
- 拿來主義
- 調試方法
- 調試的步驟
- 調試工具
- 顯示trace信息
- 開啟調試和關閉調試的區別
- netbeans+xdebug
- Socketlog
- PHP常見錯誤
- 小黃鴨調試法,每個程序員都要知道的
- 應用場景
- 第三方登錄
- 圖片處理
- 博客
- SAE
- REST實踐
- Cli
- ajax分頁
- barcode條形碼
- excel
- 發郵件
- 漢字轉全拼和首字母,支持帶聲調
- 中文分詞
- 瀏覽器useragent解析
- freelog項目實戰
- 需求分析
- 數據庫設計
- 編碼實踐
- 前端實現
- rest接口
- 文章發布
- 文件上傳
- 視頻播放
- 音樂播放
- 圖片幻燈片展示
- 注冊和登錄
- 個人資料更新
- 第三方登錄的使用
- 后臺
- 微信的開發
- 首頁及個人主頁
- 列表
- 歸檔
- 搜索
- 分頁
- 總結經驗
- 自我提升
- 進行小項目的鍛煉
- 對現有輪子的重構和移植
- 寫技術博客
- 制作視頻教程
- 學習PHP的知識和新特性
- 和同行直接溝通、交流
- 學好英語,走向國際
- 如何參與
- 瀏覽官網和極思維還有看云
- 回答ThinkPHP新手的問題
- 嘗試發現ThinkPHP的bug,告訴官方人員或者push request
- 開發能提高效率的ThinkPHP工具
- 嘗試翻譯官方文檔
- 幫新手入門
- 創造基于ThinkPHP的產品,進行連帶推廣
- 展望未來
- OneThink
- ThinkPHP4
- 附錄