本文目录[隐藏]
- 1使用方法
- 2返回值
- 3例子
- 4注意
- 5打印二维码
昨天折腾了下,给博客加了一个二维码,使用了联图网提供的在二维码中插入一个 Logo 的接口,发现一个问题,生成速度特别慢,把图片链接放到本地 CDN 之后依然很慢,可能是获取图片加上服务器不是很给力的原因导致生成速度比较慢,于是考虑到缓存(比 Google API 一样的妥协,不过 Google 不支持插入 Logo),折腾了一下成功了~
首先在 functions.php 里放代码:
|
|
<span style="color: #666666; font-style: italic;">/* *二维码 *http://www.bgbk.org */</span> <span style="color: #000000; font-weight: bold;">function</span> Bing_qrcode_cache<span style="color: #009900;">(</span> <span style="color: #000088;">$context</span><span style="color: #339933;">,</span> <span style="color: #000088;">$size</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">150</span><span style="color: #339933;">,</span> <span style="color: #000088;">$logo</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #000088;">$cache</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'qrcode'</span> <span style="color: #009900;">)</span><span style="color: #009900;">{</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">(</span> <span style="color: #000088;">$logo</span> <span style="color: #009900;">)</span> <span style="color: #000088;">$qrlogo</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'&el=h&logo='</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$logo</span><span style="color: #339933;">;</span> <span style="color: #000088;">$imgurl</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'http://qr.liantu.com/api.php?text='</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$context</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&w='</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$size</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&m=5'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$qrlogo</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">(</span> <span style="color: #339933;">!</span><span style="color: #000088;">$cache</span> <span style="color: #009900;">)</span> <span style="color: #b1b100;">return</span> <span style="color: #000088;">$imgurl</span><span style="color: #339933;">;</span> <span style="color: #000088;">$cacheimg</span> <span style="color: #339933;">=</span> get_bloginfo<span style="color: #009900;">(</span> <span style="color: #0000ff;">'url'</span> <span style="color: #009900;">)</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/qrcode/'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$name</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'.png'</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">(</span> <span style="color: #990000;">file_exists</span><span style="color: #009900;">(</span> ABSPATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'qrcode/'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$name</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'.png'</span> <span style="color: #009900;">)</span> <span style="color: #009900;">)</span> <span style="color: #b1b100;">return</span> <span style="color: #000088;">$cacheimg</span><span style="color: #339933;">;</span> <span style="color: #990000;">set_time_limit</span><span style="color: #009900;">(</span> <span style="color: #cc66cc;">10</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span> <span style="color: #000088;">$fp</span> <span style="color: #339933;">=</span> <span style="color: #339933;">@</span><span style="color: #990000;">file_get_contents</span><span style="color: #009900;">(</span> <span style="color: #000088;">$imgurl</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'r'</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">(</span> <span style="color: #339933;">!</span><span style="color: #000088;">$fp</span> <span style="color: #009900;">)</span> <span style="color: #b1b100;">return</span> <span style="color: #000088;">$imgurl</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">(</span> <span style="color: #990000;">file_put_contents</span><span style="color: #009900;">(</span> ABSPATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'qrcode/'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$name</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'.png'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$fp</span> <span style="color: #009900;">)</span> <span style="color: #009900;">)</span> <span style="color: #b1b100;">return</span> <span style="color: #000088;">$cacheimg</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">return</span> <span style="color: #000088;">$imgurl</span><span style="color: #339933;">;</span> <span style="color: #009900;">}</span> |
|
/*
*二维码
*http://www.bgbk.org
*/
function Bing_qrcode_cache( $context, $size = 150, $logo = null, $cache = true, $name = ‘qrcode’ ){
if( $logo ) $qrlogo = ‘&el=h&logo=’ . $logo;
$imgurl = ‘http://qr.liantu.com/api.php?text=’ . $context . ‘&w=’ . $size . ‘&m=5’ . $qrlogo;
if( !$cache ) return $imgurl;
$cacheimg = get_bloginfo( ‘url’ ) . ‘/qrcode/’ . $name . ‘.png’;
if( file_exists( ABSPATH . ‘qrcode/’ . $name . ‘.png’ ) ) return $cacheimg;
set_time_limit( 10 );
$fp = @file_get_contents( $imgurl, ‘r’ );
if( !$fp ) return $imgurl;
if( file_put_contents( ABSPATH . ‘qrcode/’ . $name . ‘.png’, $fp ) ) return $cacheimg;
return $imgurl;
}
使用方法
|
|
Bing_qrcode_cache<span style="color: #009900;">(</span> <span style="color: #000088;">$context</span><span style="color: #339933;">,</span> <span style="color: #000088;">$size</span><span style="color: #339933;">,</span> <span style="color: #000088;">$logo</span><span style="color: #339933;">,</span> <span style="color: #000088;">$cache</span><span style="color: #339933;">,</span> <span style="color: #000088;">$name</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span> |
|
Bing_qrcode_cache( $context, $size, $logo, $cache, $name );
参数
- $context:(字符串),(必须),填写需要生成的文本内容,例如:“生成文本内容”、“http://www.bgbk.org”,默认值:无。
- $size:(数字),(可选),填写二维码尺寸(像素数),默认值:150
- $logo:(字符串),(可选),二维码中心 Logo 的链接,默认值:null
- $cache:(布尔),(可选),是否缓存,默认值:true
- $name:(字符串),(可选),缓存后的文件名,必须在 $cache 参数为 true 的时候才有效,默认值:’qrcode’
返回值
如果没开缓存则返回生成后的图片链接。
如果开启缓存并且缓存成功或者文件已经存在则返回缓存后的本地图片链接,缓存失败则返回图片生成后的链接。
例子
|
|
<span style="color: #b1b100;">echo</span> Bing_qrcode_cache<span style="color: #009900;">(</span> <span style="color: #0000ff;">'http://www.bgbk.org'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">150</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'http://www.gravatar.com/avatar/a1472e26feb0ca37e76cac67ac92cd8d'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'example'</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span> |
|
echo Bing_qrcode_cache( ‘http://www.bgbk.org’, 150, ‘http://www.gravatar.com/avatar/a1472e26feb0ca37e76cac67ac92cd8d’, true, ‘example’ );
上边的代码执行后会输出:http://127.0.0.1/qrcode/example.png
注意
开启缓存后必须在网站根目录建立一个名为 “qrcode” 的文件夹,否则缓存保存不上去。
打印二维码
上边的二维码函数只能根据参数获取链接,需要配合其它条件使用,如果你是 WordPress 的话可以参考我的代码:
|
|
<span style="color: #666666; font-style: italic;">/* *二维码 *http://www.bgbk.org */</span> <span style="color: #666666; font-style: italic;">//输出二维码</span> <span style="color: #000000; font-weight: bold;">function</span> Bing_print_qrcode<span style="color: #009900;">(</span> <span style="color: #000088;">$size</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">150</span><span style="color: #339933;">,</span> <span style="color: #000088;">$get</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #009900;">)</span><span style="color: #009900;">{</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">(</span> <span style="color: #339933;">!</span><span style="color: #009900;">(</span> is_singular<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #339933;">||</span> is_page<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #339933;">||</span> is_home<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #339933;">||</span> is_front_page<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #339933;">||</span> is_category<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #339933;">||</span> is_tag<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span> <span style="color: #009900;">)</span> <span style="color: #b1b100;">return</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//只有文章页、首页、页面、分类页和标签页才显示二维码</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">(</span> is_singular<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span> <span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> get_the_id<span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//文章或页面图片命名为 id</span> <span style="color: #b1b100;">elseif</span><span style="color: #009900;">(</span> is_home<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #339933;">||</span> is_front_page<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span> <span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'home'</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//首页则命名为 home</span> <span style="color: #b1b100;">elseif</span><span style="color: #009900;">(</span> is_category<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span> <span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'cat-'</span> <span style="color: #339933;">.</span> get_query_var<span style="color: #009900;">(</span> <span style="color: #0000ff;">'cat'</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//分类则是 cat-分类id</span> <span style="color: #b1b100;">elseif</span><span style="color: #009900;">(</span> is_tag<span style="color: #009900;">(</span><span style="color: #009900;">)</span> <span style="color: #009900;">)</span> <span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'tag-'</span> <span style="color: #339933;">.</span> get_query_var<span style="color: #009900;">(</span> <span style="color: #0000ff;">'tag_id'</span> <span style="color: #009900;">)</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//标签页则 tag-标签id</span> <span style="color: #000088;">$cache</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//如果不使用缓存改成 false 上边命名的代码也就没用了</span> <span style="color: #000088;">$imgurl</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'<img src="'</span> <span style="color: #339933;">.</span> Bing_qrcode_cache<span style="color: #009900;">(</span> get_permalink<span style="color: #009900;">(</span><span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: #000088;">$size</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'http://www.gravatar.com/avatar/'</span> <span style="color: #339933;">.</span> <span style="color: #990000;">md5</span><span style="color: #009900;">(</span> <span style="color: #990000;">strtolower</span><span style="color: #009900;">(</span> <span style="color: #990000;">trim</span><span style="color: #009900;">(</span> get_bloginfo<span style="color: #009900;">(</span> <span style="color: #0000ff;">'admin_email'</span> <span style="color: #009900;">)</span> <span style="color: #009900;">)</span> <span style="color: #009900;">)</span> <span style="color: #009900;">)</span><span style="color: #339933;">,</span> <span style="color: #000088;">$cache</span><span style="color: #339933;">,</span> <span style="color: #000088;">$name</span> <span style="color: #009900;">)</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'" class="qrcode" width="'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$size</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'" height="'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$size</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'" alt="qrcode" />'</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//输出二维码图片代码,注意,默认中心 Logo 使用的是管理员头像</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">(</span> <span style="color: #000088;">$get</span> <span style="color: #009900;">)</span> <span style="color: #b1b100;">return</span> <span style="color: #000088;">$imgurl</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$imgurl</span><span style="color: #339933;">;</span> <span style="color: #009900;">}</span> |
|
/*
*二维码
*http://www.bgbk.org
*/
//输出二维码
function Bing_print_qrcode( $size = 150, $get = true ){
if( !( is_singular() || is_page() || is_home() || is_front_page() || is_category() || is_tag() ) ) return;//只有文章页、首页、页面、分类页和标签页才显示二维码
if( is_singular() ) $name = get_the_id();//文章或页面图片命名为 id
elseif( is_home() || is_front_page() ) $name = ‘home’;//首页则命名为 home
elseif( is_category() ) $name = ‘cat-‘ . get_query_var( ‘cat’ );//分类则是 cat-分类id
elseif( is_tag() ) $name = ‘tag-‘ . get_query_var( ‘tag_id’ );//标签页则 tag-标签id
$cache = true;//如果不使用缓存改成 false 上边命名的代码也就没用了
$imgurl = ‘<img src="’ . Bing_qrcode_cache( get_permalink(), $size, ‘http://www.gravatar.com/avatar/’ . md5( strtolower( trim( get_bloginfo( ‘admin_email’ ) ) ) ), $cache, $name ) . ‘" class="qrcode" width="’ . $size . ‘" height="’ . $size . ‘" alt="qrcode" />’;//输出二维码图片代码,注意,默认中心 Logo 使用的是管理员头像
if( $get ) return $imgurl;
echo $imgurl;
}
使用方法:
|
|
Bing_print_qrcode<span style="color: #009900;">(</span> 尺寸<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span> 则返回,<span style="color: #009900; font-weight: bold;">false</span> 则打印 <span style="color: #009900;">)</span><span style="color: #339933;">;</span> |
|
Bing_print_qrcode( 尺寸, true 则返回,false 则打印 );
请先
!