最新补充:博客已分享性能最好的 js 生成二维码方案==>传送门
去年张戈博客曾分享过一篇与二维码 API 有关的文章:《分享几个可用的二维码 API,以及给博客添加文章二维码图片的方法》,由于第三方二维码 API 总感觉稳定性和自定义性稍差,所以就到网上爬了一下相关代码,自己搭建了一个二维码 API,用了几个月感觉良好,完全可以满足我博客的自定义需求。至于博客二维码这个功能是否鸡肋,那就仁者见仁智者见智了。我个人认为,在这个移动互联网飞速发展的时代,抢占先机,做好移动端的用户体验至关重要!
这个功能不是原创,而且百度一搜一大把,都不好意思拿来分享一二。最近看到有网友留言,想要我分享这个二维码 API 源码,鉴于博客分享初衷,就厚着脸皮贴出来了。当然,不止是那个 qr code 类,而是搭建成品的整体代码或心得,毕竟张戈博客存在的目的就是尽力降低各类 IT 教程的使用门槛(哈,是不是感觉很高尚...)!
一、PHP 代码
<?php /** * PHP 在线网址二维码 API 源码分享示例 By 张戈博客(zhang.ge) * 文章地址:https://zhang.ge/5031.html **/ //载入 qrcode 类 include "./phpqrcode.php"; //取得 GET 参数 $url = isset($_GET["url"]) ? $_GET["url"] : 'help'; $errorLevel = isset($_GET["e"]) ? $_GET["e"] : 'L'; $PointSize = isset($_GET["p"]) ? $_GET["p"] : '3'; $margin = isset($_GET["m"]) ? $_GET["m"] : '0'; preg_match('/http:\/\/([\w\W]*?)\//si', $url, $matches); //简单判断 //if ( $matches[1] != 'zhang.ge' && $matches[1] != 'zgboke.com' || $url == 'help') { //取消此行注释并注释下面一行,就能加入自定义的 url 过滤功能 if ( $url == 'help'){ //简单的描述一下使用方法 header("Content-type: text/html; charset=utf-8"); echo '<title>在线二维码 API 接口| 张戈博客</title>'; echo '<h1>欢迎使用张戈博客在线二维码 API 服务!</h1> 使用前请仔细查看参数说明:<br /> <br /> url: 二维码对应的网址<br /><br /> m  : 二维码白色边框尺寸,缺省值: 0px<br /><br /> e  : 容错级别(errorLevel),可选参数如下(缺省值 L):<br />  L 水平 7%的字码可被修正<br />  M 水平 15%的字码可被修正<br />  Q 水平 25%的字码可被修正<br />  H 水平 30%的字码可被修正<br /> p  : 二维码尺寸,可选范围 1-10(具体大小和容错级别有关)(缺省值:3)<br /><br /> 常规用法:<a href="seo.zgboke.com/qr/?m=0&e=L&p=3&url=https:///" target="_blank">http://seo.zgboke.com/qr/?m=0&e=L&p=3&url=https://zhang.ge/</a><br /><br /> CDN 加速:<br /> 格 式:http://seo.zgboke.com/qr/$m_$e_$p_$url_cdn.png <br /> 示 例:<a href="seo.zgboke.com/qr/0_l_3_https:///_cdn.png" target="_blank">http://seo.zgboke.com/qr/0_l_3_https://zhang.ge_cdn.png</a><br /> '; exit(); } else { //调用二维码生成函数 createqr($url, $errorLevel, $PointSize, $margin); } //简单二维码生成函数 function createqr($value,$errorCorrectionLevel,$matrixPointSize,$margin) { QRcode::png($value, false, $errorCorrectionLevel, $matrixPointSize, $margin); } ?>
将以上代码保存为 php 文件(比如 qr.php),上传到网站指定目录(比如根目录 /)。
二、QrCode 类
下载 PHP 的 QrCode 类,上传到网站目录,其实百度一搜一大把,还是贴上张戈博客自用的文件吧!
Ps:以上相关代码均已包含在内。
三、CDN 加速
因为这个 API 是在线生成的,如果请求过于频繁,将会影响到服务器性能和加载速度。所以,我们有必要继续优化一下。我个人想到 3 个解决方案:
①、每生成一个新的二维码图片就缓存一份到服务器,下次若是相同的内容,将直接读取;
②、利用伪静态重写请求地址,伪装成静态文件格式,比如 png、jpg 等,然后开启免费 CDN;
③、结合①和②,实现伪静态+CDN 加速+浏览器缓存加速,达到优化加载速度。
目前张戈博客仅使用了第 ② 种方案,已完全可以满足博客的需求,所以就懒得去折腾更完善的方法,感兴趣的童鞋可以自己去试试,下面说一下伪静态规则。
张戈博客将这个 API 搭建在万网的免费虚拟主机上,所以仅分享 Apache 伪静态规则,其他 WEB 服务器请自行解决。
Apache 伪静态规则:
RewriteEngine on RewriteBase / #QR 二维码 RewriteRule ^qr/(.*)_(.*)_(.*)_http:/(.*)_cdn\.png$ qr/index.php?m=$1&e=$2&p=$3&url=http://$4 [L] RewriteRule ^qr/(.*)_(.*)_(.*)_(.*)_cdn\.png$ qr/index.php?m=$1&e=$2&p=$3&url=$4 [L]
注:以上是将 API 源码上传到网站根目录下的 qr 文件夹的例子!
伪静态之后,这个二维码地址就是一个正常的 png 格式了,只要到免费 CDN(比如百度云加速或 360 网站卫士等)开启静态资源缓存即可实现 CDN 加速。
四、使用范例
直接访问本文第一段代码所保存的文件就能看到简单的使用说明了:
欢迎使用张戈博客在线二维码 API 服务! 使用前请仔细查看参数说明: url: 二维码对应的网址 m : 二维码白色边框尺寸,缺省值: 0px e : 容错级别(errorLevel),可选参数如下(缺省值 L): L 水平 7%的字码可被修正 M 水平 15%的字码可被修正 Q 水平 25%的字码可被修正 H 水平 30%的字码可被修正 p : 二维码尺寸,可选范围 1-10(具体大小和容错级别有关)(缺省值:3) 常规用法:http://seo.zgboke.com/qr/?m=0&e=L&p=3&url=https://zhang.ge/ CDN 加速: 格 式:http://seo.zgboke.com/qr/$m_$e_$p_$url_cdn.png 示 例:http://seo.zgboke.com/qr/0_l_3_https://zhang.ge_cdn.png
查看效果:http://seo.zgboke.com/qr/0_l_3_https://zhang.ge_cdn.png
按下 F12,到 NetWork 选项卡查看头部已经可以看到百度云加速的 HIT 缓存标识了!
至于如何应用到博客当中,请移步查看张戈博客以前分享的教程:https://zhang.ge/4609.html
前不久用过,二维码+LOGO模式,个人感觉有点华而不实,只在主题设置后台加了个开关。
仁者见仁智者见智,自己喜欢就好,反正那个位置闲着也是闲着,也许就有人想换到手机访问呢?
当然,一些功能还是要根据用户习惯来制定,个人爱好也是必须的。
这些代码 怎么加上LOGO
微信的受众面现在这么广,提前抢占个先机是很不错的想法
还是直接调API方便……
rewrite ^qrcode/(.*)_(.*)_(.*)_http:/(.*)_cdn\.png$ qrcode/index.php?m=$1&e=$2&p=$3&url=http://$4 last;
rewrite ^qrcode/(.*)_(.*)_(.*)_(.*)_cdn\.png$ qrcode/index.php?m=$1&e=$2&p=$3&url=$4 last
这是我在nginx下面的伪静态规则,不行,有问题,
博主,根据你这篇文章,我实现了网址二维码,在此非常感谢!
同时有个问题想请教下,就是防盗链的问题,因为本人主机配置较低,所以才有此问题。
注意代码中有一段:
注释下一个if,使用上一个if语句即可开启域名验证。
非常感谢@
欢迎常来逛逛
无私的奉献!
测试了,有个问题就是,如果url长短不一,生成的图片大小是不同的,例如这两个。
这样用到网页里面的话,就……
这问题也太幼稚了吧,二维码代表的就是url或字符内容,url越长,二维码就越复杂,图片也就越大。
话又说回来,图片越大用到网页又如何??你怕图片有几百兆还是啥的??就一个文章二维码,我想不出用到网页中会用什么问题?
很明显你没看那两个实例,图片大小指的是规格大小、长宽、像素!不是指文件体积、占用空间。
看看这两个吧,对比下。
http://qr.liantu.com/api.php?el=l&w=200&m=10&text=https://zhang.ge
http://qr.liantu.com/api.php?el=l&w=200&m=10&text=https://zhang.ge/ental-decay-children-breathrserver/v1/create-qr-code.html
直接说图片尺寸不就好了。。。
确实存在尺寸不同问题,你可以研究研究。
一··············
查找生成二维码的资料来到这里,博主写得很详细,对我帮助很大,感谢!
这个挺实用,研究 一下去了
终于解决了一个心病,回访致谢。
非常好的教程!不过要怎么样才能把logo插入到二维码的中间?
想加个LOGO描边模式,可以实现吗?
没试过,你可以研究看看。
这个东西其实很实用的,哈哈,谢谢站长分享!
这个之前我折腾过,后来撤掉了。
怎么加头像 大神~~~~~
JS的无法保存图片,PHP的 没LOGO 怎么加LOGO啊
感谢分享
有没有源码呢 小白 不会用 谢谢提供
伪静态是不是少个/
http://
看这篇:https://zhang.ge/5020.html
大佬,发现一个问题,这个直接调用url,会过滤url 里面的 and 符号。
比如:http://seo.zgboke.com/qr/?m=0&e=L&p=3&url=https://zhang.ge/api.php?class=1&id=888
网址后面 and 符号之后就直接过滤掉了。
请问有解么,哈哈,需要用这个东西来生成一些页面的二维码。