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

PHP生成二维码名片带LOGO并解决LOGO失真

2016-11-20 13:41 369 查看

PHP生成二维码名片带LOGO并解决LOGO失真

在过去,人们拿了名片,需要手动把上面的信息存进手机。如今,如果你还在使用这样的名片,这样繁琐的录入方法,那可就逊毙了。赶紧把你过去的名片丢尽垃圾桶,换上时尚潮流的二维码名片吧。二维码名片把传统名片和二维码结合在一起,它不仅包含了传统的联系方式(如手机、邮箱、地址等),还加入了二维码信息。它可以让你一键保存个人联系方式。

二维码名片为vCard模式。vCard(或称做Versitcard)最早是由Versit联盟于1995年提出的,当时联盟成员包括苹果公司,AT&T科技(后来的朗讯),IBM及西门子。在1996年十二月,格式的拥有权移至因特网邮件联盟(IMC),此联盟是由一些关注因特网电子邮件的公司所组成。

vCard标准的2.1版被电子邮件客户端广泛支持。3.0版是一个包含在RFC 2425和RFC 2426中的IETF标准跟踪提案。vCard的常用文件扩展名是.vcf。不同的程序对vCard标准实现亦不同。Mac OS X中的Address Book允许把所有联系人导出到一个vcf文件,而Microsoft Outlook只能每人一个文件。Linux中KDE的Kontact允许每个文件导入或导出一人或多人。

标准格式:

BEGIN:VCARD

VERSION:3.0

FN:姓名

NICKNAME:昵称

ORG:公司或部门

TITLE:职位

TEL;WORK;VOICE:工作电话

TEL;HOME;VOICE:家庭电话

TEL;PAGER;VOICE:电话

TEL;CELL;VOICE:移动电话

ADR;WORK:工作详细地址;辽宁;大连;000000;中国

ADR;HOME:家庭详细地址;辽宁;大连;000000;中国

ADR;POSTAL;PARCEL:详细地址;辽宁;大连;000000;中国

URL:网址

EMAIL;PREF;INTERNET:邮箱地址

NOTE;ENCODING=QUOTED-PRINTABLE:备注

END:VCARD

使用QRCODE生成二维码:

1.引入QRCODE类库

2.封装数据,格式查看标准格式

3.生成二维码:QRcode::png();

封装一段PHP代码:

<?php
include_once 'phpqrcode.php';
// 引入phpqrcode.php文件
// 调用方式:
// $vCard = new vCard();
// $vCard->setFn('孟');
// $vCard->setNickname('Song');
// 输出文本
// $vCard->getvCard('text');
// 输入文本为:BEGIN:VCARD VERSION:3.0 FN:孟 NICKNAME:Song END:VCARD
// 输出二维码
// $vCard->getvCard();
class vCard {
public $_version   = '3.0';        //版本
public $_begin     = 'VCARD';  //数据格式开始,默认不需要更改
public $_fn        = '';       //姓名
public $_nickname  = '';       //昵称
public $_org       = '';       //公司或部门
public $_title     = '';       //职位
public $_workTel   = '';       //工作电话
public $_homeTel   = '';       //家庭电话
public $_pagereTel = '';       //电话
public $_cellTel   = '';       //移动电话
public $_workAdr   = '';       //工作地址
public $_homeAdr   = '';       //家庭地址
public $_parcelAdr = '';       //详细地址
public $_url       = '';       //个人首页
public $_email     = '';       //邮件地址
public $_note      = '';       //备注
public $_end       = 'VCARD';  //数据格式结束,默认不需要更改
public $_qrcode    = '';       //二维码存放路径带文件名,例:qrcode.png
public $_logo      = '';       //二维码中心图片

function setQrcode($value = '') {
$this->_qrcode = $value;
return $this->_qrcode;
}

function setLogo($value = '') {
$this->_logo = $value;
return $this->_logo;
}

function setVersion($value = '') {
$this->_version = $value;
return $this->_version;
}

function setBegin($value = '') {
$this->_begin = $value;
return $this->_begin;
}

function setFn($value = '') {
$this->_fn = $value;
return $this->_fn;
}

function setNickname($value = '') {
$this->_nickname = $value;
return $this->_nickname;
}

function setOrg($value = '') {
$this->_org = $value;
return $this->_org;
}

function setTitle($value = '') {
$this->_title = $value;
return $this->_title;
}

function setWorkTel($value = '') {
$this->_workTel = $value;
return $this->_workTel;
}

function setHomeTel($value = '') {
$this->_homeTel = $value;
return $this->_homeTel;
}

function setPagereTel($value = '') {
$this->_pagereTel = $value;
return $this->_pagereTel;
}

function setCellTel($value = '') {
$this->_cellTel = $value;
return $this->_cellTel;
}

function setWorkAdr($value = '') {
$this->_workAdr = $value;
return $this->_workAdr;
}

function setHomeAdr($value = '') {
$this->_homeAdr = $value;
return $this->_homeAdr;
}

function setParcelAdr($value = '') {
$this->_parcelAdr = $value;
return $this->_parcelAdr;
}

function setUrl($value = '') {
$this->_url = $value;
return $this->_url;
}

function setEmail($value = '') {
$this->_email = $value;
return $this->_email;
}

function setNote($value = '') {
$this->_note = $value;
return $this->_note;
}

function setEnd($value = '') {
$this->_end = $value;
return $this->_end;
}

function getvCard($type = 'card') {
$vCard = '';
if($this->_begin) {
$vCard .= 'BEGIN:' . $this->_begin .  PHP_EOL;
}
if($this->_version) {
$vCard .= 'VERSION:' . $this->_version . PHP_EOL;
}
if($this->_fn) {
$vCard .= 'FN:' . $this->_fn . PHP_EOL;
}
if($this->_nickname) {
$vCard .= 'NICKNAME:' . $this->_nickname . PHP_EOL;
}
if($this->_org) {
$vCard .= 'ORG:' . $this->_org . PHP_EOL;
}
if($this->_title) {
$vCard .= 'TITLE:' . $this->_title . PHP_EOL;
}
if($this->_workTel) {
$vCard .= 'TEL;WORK;VOICE:' . $this->_workTel . PHP_EOL;
}
if($this->_homeTel) {
$vCard .= 'TEL;HOME;VOICE:' . $this->_homeTel . PHP_EOL;
}
if($this->_pagereTel) {
$vCard .= 'TEL;PAGER;VOICE:' . $this->_pagereTel . PHP_EOL;
}
if($this->_cellTel) {
$vCard .= 'TEL;CELL;VOICE:' . $this->_cellTel . PHP_EOL;
}
if($this->_workAdr) {
$vCard .= 'ADR;WORK:' . $this->_workAdr . PHP_EOL;
}
if($this->_homeAdr) {
$vCard .= 'ADR;HOME:' . $this->_homeAdr . PHP_EOL;
}
if($this->_parcelAdr) {
$vCard .= 'ADR;PARCEL:' . $this->_parcelAdr . PHP_EOL;
}
if($this->_url) {
$vCard .= 'URL:' . $this->_url . PHP_EOL;
}
if($this->_email) {
$vCard .= 'EMAIL;PREF;INTERNET:' . $this->_email . PHP_EOL;
}
if($this->_note) {
$vCard .= 'NOTE;ENCODING=QUOTED-PRINTABLE:' . $this->_note . PHP_EOL;
}
if($this->_end) {
$vCard .= 'END:' . $this->_end;
}
if($type != 'card') {
echo $vCard;
} else {
$this->getQrcode($vCard);
}
}

public function getQrcode($vCard = '') {
if(!$vCard) {
return false;
}
if(!$this->_qrcode) {
return false;
}
$errorCorrectionLevel = 3;//容错级别
$matrixPointSize      = 9;//生成图片大小   生成大概400*400的二维码
QRcode::png($vCard, $this->_qrcode, $errorCorrectionLevel, $matrixPointSize, 2);
if(!$this->_logo) {
return false;
}
$qr             = imagecreatefromstring(file_get_contents($this->_qrcode));
$logo           = imagecreatefromstring(file_get_contents($this->_logo));
$qr_width       = imagesx($qr);
$qr_height      = imagesy($qr);
$logo_width     = imagesx($logo);
$logo_height    = imagesy($logo);
if($logo_height > $logo_width) {
$logo_height = $logo_width;
}
$logo_qr_width  = $qr_width / 4;
$scale          = $logo_width / $logo_qr_width;
$logo_qr_height = $logo_height / $scale;
$from_width     = ($qr_width - $logo_qr_width) / 2;
$test = imagecopyresampled($qr, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
imagepng($qr, $this->_qrcode);
imagedestroy($qr);
}
}


logo失真是因为QRimage类下的方法image下由两处地方生成图片都用imagecreate,将其改为imagecreatetruecolor,这样就会生成不失真logo的二维码图片咯。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二维码