## 依赖的库
之前有个项目用做了扫描枪用的条形码生成。
就给大家演示下。
官网是<http://www.barcodephp.com>
![](https://box.kancloud.cn/2015-11-28_565979750527d.png)
下载了最新版。
然后我们把这种第三方库放入vendor里去
![](https://box.kancloud.cn/2015-11-28_565979752edb2.png)
注意不同的码类型使用对应不同的class。
## 效果
![](https://box.kancloud.cn/2015-11-28_5659797541c2a.png)
大家可以修改生成的文本 参数 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编码的问题。
## 效果
![](https://box.kancloud.cn/2015-11-28_5659797555b5a.png)
- 序
- 前言
- 内容简介
- 目录
- 基础知识
- 起步
- 控制器
- 模型
- 模板
- 命名空间
- 进阶知识
- 路由
- 配置
- 缓存
- 权限
- 扩展
- 国际化
- 安全
- 单元测试
- 拿来主义
- 调试方法
- 调试的步骤
- 调试工具
- 显示trace信息
- 开启调试和关闭调试的区别
- netbeans+xdebug
- Socketlog
- PHP常见错误
- 小黄鸭调试法,每个程序员都要知道的
- 应用场景
- 第三方登录
- 图片处理
- 博客
- SAE
- REST实践
- Cli
- ajax分页
- barcode条形码
- excel
- 发邮件
- 汉字转全拼和首字母,支持带声调
- 中文分词
- 浏览器useragent解析
- freelog项目实战
- 需求分析
- 数据库设计
- 编码实践
- 前端实现
- rest接口
- 文章发布
- 文件上传
- 视频播放
- 音乐播放
- 图片幻灯片展示
- 注册和登录
- 个人资料更新
- 第三方登录的使用
- 后台
- 微信的开发
- 首页及个人主页
- 列表
- 归档
- 搜索
- 分页
- 总结经验
- 自我提升
- 进行小项目的锻炼
- 对现有轮子的重构和移植
- 写技术博客
- 制作视频教程
- 学习PHP的知识和新特性
- 和同行直接沟通、交流
- 学好英语,走向国际
- 如何参与
- 浏览官网和极思维还有看云
- 回答ThinkPHP新手的问题
- 尝试发现ThinkPHP的bug,告诉官方人员或者push request
- 开发能提高效率的ThinkPHP工具
- 尝试翻译官方文档
- 帮新手入门
- 创造基于ThinkPHP的产品,进行连带推广
- 展望未来
- OneThink
- ThinkPHP4
- 附录