快速封装一个二维码在线生成接口
2017-02-13 10:28
405 查看
方法一:利用接口,生成二维码
这种方法生成的二维码最简单,你只需要调用别人提供的二维码生成接口,同时传递相应的参数即可.<?php /** * @author DengPeng <3@dengpeng.cc> * @since 2017/01/18 * @copyright copyright (c) 2017 itbool.com GPL * @license http://www.itbool.com/ */ $url = 'http://www.itbool.com'; $logo = 'http://www.itbool.com/images/logo.jpg'; $alt = '我的二维码'; generateQRcode($url, $logo, $alt); /** * 利用接口输出二维码 */ function generateQRcode($text, $logo='', $alt='') { $text = urlencode($text); echo '<img src="http://qr.topscan.com/api.php?text='.$text.'&logo='.$logo.'" alt="'.$alt.'">'; }
展现效果:
方法二:使用专门的类库PHP QR Code
步骤①:去PHPQRCode类库官方下载类库官方地址:http://phpqrcode.sourceforge.net/
步骤②:引入qrlib.php库文件,调用QRcode::png()静态方法即可实现生成二维码
<?php /** * @author DengPeng <3@dengpeng.cc> * @since 2017/01/18 * @copyright copyright (c) 2017 itbool.com GPL * @license http://www.itbool.com/ */ /** * 调用PHPQR类库生成二维码图片 */ include './phpqrcode/qrlib.php'; // $text二维码中的内容 $text = 'http://www.dengpeng.cc/'; // 是否生成图片资源,FALSE为不生成,只输出 $outfile = false; // 容错率,也就是即使有区域被覆盖,仍然能够被识别 /** * L QR_ECLEVEL_L,7% 就是被覆盖7%也能被识别 * M QR_ECLEVEL_M,15% 就是被覆盖15%也能被识别 * Q QR_ECLEVEL_Q,25% 就是被覆盖25%也能被识别 * H QR_ECLEVEL_H,30% 就是被覆盖30%也能被识别 * 那么你可想而知,当纠错级别变高后,图片自然而然变大了,因为像素点变大了 */ $level = 'QR_ECLEVEL_L'; // 生成的图片大小 $size = 10; // 二维码图片的margin值,就是二维码图边距值 $margin = 2; // 是否保存二维码,并显示 $saveandprint=false; QRcode::png($text, false, $level, $size, $margin);
基于PHPQRCode类库自行封装一个二维码生成接口
学习完PHPQRCode类库,有些小伙伴可能按捺不住了,既然别人能写一个接口,那我能不能利用这个类库,也来写一个二维码在线生成接口呢?基于分享的精神,我们决定,带领小伙伴们,来封装一个这样接口.
首先看下我的目录结构:
编辑api.php文件
<?php /** * @author DengPeng <3@dengpeng.cc> * @since 2017/01/18 * @copyright copyright (c) 2017 itbool.com GPL * @license http://www.itbool.com/ */ /** * 接口文件 */ // 加载类库 include './phpqrcode/qrlib.php'; // error_reporting(0); // 获取调用者参数 $text = isset($_GET['text']) ? trim($_GET['text']) : 'http://www.dengpeng.cc/'; $w = isset($_GET['w']) ? trim($_GET['w']) : 10; $logo = isset($_GET['logo']) ? trim($_GET['logo']) : false; $el = isset($_GET['el']) ? trim($_GET['el']) : 'h'; // 执行生成 generateQRcode($text, $w, $logo, $el); /** * 二维码生成器 * @param string $text [description] * @param integer $w [description] * @param string $logo [description] * @param string $el [description] * @return [type] [description] * 2017-01-18T15:01:40+0800 */ function generateQRcode($text='http://www.dengpeng.cc/', $w=10, $logo_img=false, $el='h') { // 将纠错级别转成大写 $el = strtoupper($el); // 1)判断是否有logo需要加载 if ($logo_img !== false) { // 先生成二维码 QRcode::png($text, 'qrcode.png', $el, $w, 2); // 创建大画布 $qr = imagecreatefromstring(file_get_contents('qrcode.png')); // 创建小画布 $logo = imagecreatefromstring(file_get_contents($logo_img)); // 获取大画布的宽高 list($qr_w, $qr_h) = getimagesize('qrcode.png'); // 获取小画布的宽高 list($logo_w, $logo_h) = getimagesize($logo_img); // 创建空白画布 // 定义logo最终的宽高,为了让logo能够自适应 // logo覆盖的面积为二维码的三分之一 $width = $qr_w/3; $height = $qr_h/3; $white_logo = imagecreatetruecolor($width, $height); $white = imagecolorallocate($white_logo, 255, 255, 255); imagefill($white_logo, 0, 0, $white); // 等比例缩放logo $ratio = $logo_w/$logo_h; if ($width/$height > $ratio) { $width = $height*$ratio; } else { $height = $width/$ratio; } // 重新采样 imagecopyresampled($qr, $logo, ($qr_w-$width)/2, ($qr_h-$height)/2, 0, 0, $width, $height, $logo_w, $logo_h); // 输出图片 Header("Content-type: image/png"); /** * 图片输出,二选一,gd库自定义的函数imagepng()或者 * 像PHPQRCode类库一样使用ImagePng()这在Windows系统下没有问题 * 但是移植到了Linux系统下,问题就暴露了,严格区分大小写 * */ imagepng($qr); // 销毁画布 imagedestroy($qr); imagedestroy($logo); imagedestroy($white_logo); } else { // 没有logo的情况 return QRcode::png($text, false, $el, $w, 2); } }
效果展示:
好了,基于PHPQRCode类库制作自己的接口就是这么简单,赶快测试一下,做成自己的接口,跟你的小伙伴一起使用吧.
注意事项:
①你的PHP必须开启了php_gd2.dll说明:
PHPQRCode类库很强大,不只是笔者写的这几个简单的功能.比如二维码的背景色,前景色,边框等等这些更有趣的东西需要大家自行去探索,这里只是简单地带你入门,如何使用第三方类库,和如何基于第三方类库,封装自己的接口.相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- 马化腾亲自“站台” 企业微信和个人微信互通能带来什么?
- Php Installing An Expansion
- Laravel5.3 表单验证中文报错提示语言包
- 10 件在 PHP 7 中不要做的事情
- 写程序的时候应该如何思考?
- rem : web app适配的秘密武器
- jquery高级应用之Deferred对象
- 关于浮动与清除浮动,你应该知道的
- 数组reduce方法的高级技巧
- php7 读取php.ini[4]
- PHP-max_execution_time与fpm.request_terminate_timeout介绍