PHP生成二维码【谷歌API+qrcode+圆角Logo】
方法一:谷歌二维码API
接口地址:https://chart.googleapis.com/chart
官方文档:https://developers.google.com/chart/infographics/docs/qr_codes
参数说明:
cht=qr:必要参数,固定值<qr>,表明要生成二维码
chs=<width>x<height>
:必要参数,生成二维码尺寸,单位是像素,目前生成的二维码都是正方形的,所以两个宽高值都设置为一样的值
chl=<data>
:必要参数,生成二维码包含的信息,可以是数字、字符、二进制信息、汉字。不能混合数据类型,数据必须经过UTF-8 URL-encoded.如果需要传递的信息超过2K个字节,需使用POST方式
choe=<output_encoding>
:可选参数,编码格式。包括UTF-8/Shift_JIS/ISO-8859-1三个选项,默认为UTF-8。
chld=<error_correction_level>|<margin>
:可选参数,
error_correction_level
:容错级别(共分四个等级,L-默认:可以识别已损失的7%的数据;M-可以识别已损失15%的数据;Q-可以识别已损失25%的数据;H-可以识别已损失30%的数据)
margin
:生成的二维码离图片边框的距离
例一:扫描二维码打开网址(API)
<?php
//二维码信息,用urlencode编码
$data = urlencode('http://www.baidu.com');
//生成二维码尺寸
$size = '300x300';
//完整的API地址
$qrurl = "http://chart.googleapis.com/chart?chs=$size&cht=qr&chl=$data&chld=L|1&choe=UTF-8";
//获取二维码
$qrcode = file_get_contents($qrurl);
//输出图片
header('Content-type: image/png');
echo $qrcode;
在打开一个网站之后,我们要来实现归初的目的,扫描二维码,将企业信息导入通讯录,即在 二维码中包含一个名片信息,
其实二维码说白了就是将一堆信息转换为图片的形式表达,而这堆信息到底是什么样子的它并不关心,真正关心这些信息的是扫描二维 码的工具,以上面的例子来说,
当你用微信扫描二维码后,微信读取到二维码中储存的数据,然后尝试开始辨别它,当它发现内容是百度的网址时便使用浏览器打开 它,
同样的当它发现内容是一堆简单的文本数据时便以文本的形式来显示,同样的微信还可以辨别出二维码的内容是不是一个 vcard 格式的电子名片,
我们的手机通讯录导入导出的时候大多是这种格式,所以我们可以直接在二维码中包含一个标准的 vcard 电子名片,这样就可以让扫描工具将它识别为通讯录。
vcard 格式参考如下: BEGIN:VCARD
VERSION:3.0
FN:用户名
TEL;CELL;VOICE:18858140621
TEL;WORK;VOICE:0358-2157466
TEL;WORK;FAX:0358-2157466
EMAIL;PREF;INTERNET:lzw#lzw.me
URL:http://lzw.me
orG:志文工作室
ROLE:产品部
TITLE:CTO
ADR;WORK;POSTAL:北京市朝阳区北四环中路35号;100101
REV:2012-12-27T08:30:02Z
END:VCARD 如果你想更详细的定制所需要的格式,请百度 vcard 的格式标准。
例二:生成一个名片二维码(API)
<?php
//构建一个 vcard 格式数据
$vcard =
"BEGIN:VCARD".
"\nVERSION:3.0".
"\nFN:小编络络".
"\nTEL;CELL;VOICE:18858140621".
"\nTEL;WORK;VOICE:0358-2157466".
"\nEMAIL:luoluo@qq.com".
"\nURL:http://www.baidu.com".
"\nADR:浙江省杭州市滨江区".
"\nEND:VCARD"; //二维码信息,用urlencode编码
$data = urlencode($vcard);
//生成二维码尺寸
$size = '300x300';
//完整的API地址
$qrurl = "http://chart.googleapis.com/chart?chs=$size&cht=qr&chl=$data&chld=L|1&choe=UTF-8";
//获取二维码
$qrcode = file_get_contents($qrurl);
//输出图片
header('Content-type: image/png');
echo $qrcode; 到此为止我们归初的目的已经基本实现,但实际使用中,由于直接将上述拼装好的 url 加到了 img 标签的 src 属性,结果出了点小问题,由于我们的名片信息比较多,
导致了二维码生成错误,在本文开头已经用红色字体标出,
get 方式最多只能传递 2K 大的数据,
大于 2K 数据时我们需要使用 POST 请求,
所以在实际使用中,可以先在程序中通过 POST 方式获取二维码并保存为本地图片,之后直接调用本地图片即可。
例五:生成带 Logo 二维码
<?php
// 包含 qrlib.php 或 phpqrcode.php
include('./phpqrcode/qrlib.php');
// 构建 vcard 数据
$vcard =
"BEGIN:VCARD".
"\nVERSION:3.0".
"\nFN:王歌".
"\nTEL;CELL;VOICE:18858140621".
"\nTEL;WORK;VOICE:0358-2157466".
"\nEMAIL:wang@qq.com".
"\nURL:http://www.mailuow.com".
"\nADR:浙江省杭州市滨江区江虹路1750号".
"\nEND:VCARD"; // 纠错级别:L、M、Q、H
$errorCorrectionLevel = 'M'; // 点的大小:1到10
$matrixPointSize = 4; // 保存文件名
$filename = 'test.png'; //生成二维码
QRcode::png($vcard, $filename, $errorCorrectionLevel, $matrixPointSize, 2); //获取二维码
$qrcode = file_get_contents($filename);
$qrcode = imagecreatefromstring($qrcode);
$qrcode_width = imagesx($qrcode);
$qrcode_height = imagesy($qrcode); //圆角图片
$corner = file_get_contents('./images/corner.png');
$corner = imagecreatefromstring($corner);
$corner_width = imagesx($corner);
$corner_height = imagesy($corner); //计算圆角图片的宽高及相对于二维码的摆放位置,将圆角图片拷贝到二维码中央
$corner_qr_height = $corner_qr_width = $qrcode_width/5;
$from_width = ($qrcode_width-$corner_qr_width)/2;
imagecopyresampled($qrcode, $corner, $from_width, $from_width, 0, 0, $corner_qr_width, $corner_qr_height, $corner_width, $corner_height); //logo图片
$logo = file_get_contents('./images/logo.jpg');
$logo = imagecreatefromstring($logo);
$logo_width = imagesx($logo);
$logo_height = imagesy($logo); //计算logo图片的宽高及相对于二维码的摆放位置,将logo拷贝到二维码中央
$logo_qr_height = $logo_qr_width = $qrcode_width/5 - 6;
$from_width = ($qrcode_width-$logo_qr_width)/2;
imagecopyresampled($qrcode, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); header('Content-type: image/png');
imagepng($qrcode);
imagedestroy($qrcode);
imagedestroy($corner);
imagedestroy($logo);
PHP生成二维码【谷歌API+qrcode+圆角Logo】的更多相关文章
- C# 生成二维码并且在中间加Logo
今天做项目的时候有个在生成二维码并且在中间加入Logo的需求,动手试了几把,总感觉效果没有之前写的好,就翻出旧代码,果然还是熟悉的味道,生成一张效果图如下 左边是微信里面的,右边是我自己生成的 原理比 ...
- 在线生成二维码的API接口
现在很多大网站都有这样的一个功能,使用手机扫描一下网页上的二维码便可快速在手机上访问网站.想要实现这样的功能其实很简单,下面麦布分享几个在线生成网址二维码的API接口.都是采用http协议接口,无需下 ...
- 动态生成二维码插件 jquery.qrcode.js
前段时间做项目,需要动态生成一个二维码,于是就在网上找了一下发现一个jquery插件jquery.qrcode.js,所以今天就简单说一下这个插件的使用: jquery.qrcode.js是依赖jqu ...
- php生成二维码,使用qrcode类库创建
传说Google有个接口,可以生成二维码,这让我有点鸡冻不已,于是,......(省略1000字).结果,我找到了另外一个方法,是使用一个php类库,该工具叫:qrcode,但下载该工具可真是要人命. ...
- 生成二维码(jquery.qrcode.min.js插件)
生成二维码:参看GitHub资源https://github.com/jeromeetienne/jquery-qrcode 直接上代码:(都需要引入jQuery.js 1.引入(jquery.qr ...
- QRCode生成二维码,jq QRCode生成二维码,QRCode生成电子名片
[QRCode官网]http://phpqrcode.sourceforge.net/ PHP QRCode生成二维码 官网下载QRCode源码包,引入源码包中的 qrlib.php . <?p ...
- 生成二维码、条形码、带logo的二维码
Nuget安装ZXing.Net,帮助类: using System; using System.Collections.Generic; using System.Drawing; using Sy ...
- 【转】C# 生成二维码并且在中间加Logo(图片合并)
public class QRCodeHelper { public static Bitmap GetThumbnail(Bitmap b, int destHeight, int destWidt ...
- 利用google api生成二维码名片例子
二维条码/二维码可以分为堆叠式/行排式二维条码和矩阵式二维条码.堆叠式/行排式二维条码形态上是由多行短截的一维条码堆叠而成:矩阵式二维条码以矩阵的形式组成,在矩阵相应元素位置上用“点”表示二进制“1” ...
随机推荐
- 判断cdn上的图片可以正常访问到
昨天晚上cdn宕机1小时,要对上传的资检查,写了个简单的小脚本来实现上传过的资源都是正常的(其实非必须),就是练手防止生疏. arr.each do |a | res = Net::HTTP.get_ ...
- appium testcase1(Java)
官网源码地址 https://github.com/appium/sample-code/blob/47fc0305396b8322b727820ca55a07607395040c/sample-co ...
- animate实现动画效果
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- 测试环境下将centos6.8升级到centos7的操作记录(转)
在测试环境下安装openstack,由于在centos6下安装openstack,针对源的问题有很多,安装起来很不顺利! 但是在centos7下安装却很顺利,所以考虑将服务器由centos6升级到ce ...
- 微信公众平台开发(98) UnionID
关键字 微信公众平台 微信开放平台 UnionID作者:方倍工作室原文:http://www.cnblogs.com/txw1958/p/weixin98-get-user-UnionID.html ...
- 5、JavaScript进阶篇②——函数、事件、内置对象
一.函数 1. 什么是函数 函数的作用,可以写一次代码,然后反复地重用这个代码. 如:我们要完成多组数和的功能. var sum; sum = 3+2; alert(sum); sum=7+8 ; a ...
- Nuget程序包 使用log4net
Nuget程序包不用细介绍,网上资源很多,有个项目使用了log4net,为项目打log,功能很多,足够一般使用. 使用时候需要在配置文件中对其进行相关配置,我自己的配置文件放在App.config文件 ...
- 安装confluence
转自 王小乃 http://blog.163.com/s_w_wang/blog/static/171609221201472202759381/ 安装confluence-5.4.4-x64 参考 ...
- mysql-proxy之奇虎360 Atlas 安装实现mysql读写分离
官方git https://github.com/Qihoo360/Atlas 参照:http://blog.qixingzhong.com/2013/09/centos-install-atlas. ...
- C# 集合-并发处理-锁OR线程
每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不 ...