您的位置:首页 > 编程语言 > PHP开发

快速封装一个二维码在线生成接口

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类库很强大,不只是笔者写的这几个简单的功能.比如二维码的背景色,前景色,边框等等这些更有趣的东西需要大家自行去探索,这里只是简单地带你入门,如何使用第三方类库,和如何基于第三方类库,封装自己的接口.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息