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的二维码图片咯。
相关文章推荐
- PHP生成带LOGO二维码并解决失真
- 基于PHP QR Code生成带不失真logo二维码
- php 使用phpqrcode类生成带有logo的二维码 使logo不失真(透明)
- 使用PHP生成带LOGO的个性化二维码图像
- php学习笔记---PHP生成二维码名片,并把名片内容添加到联系人中
- Java版本logo 名片二维码生成工具类
- 利用phpqrcode类库生成中间带logo的二维码
- thinkphp使用phpqrcode生成带logo二维码
- PHP生成自带logo的二维码
- 【转载】php利用PHP QR Code生成二维码(带logo)
- 使用PHP生成二维码的两种方法(带logo图像)
- 使用PHP生成二维码的两种方法(带logo图像)
- PHP基于phpqrcode生成带LOGO图像的二维码实例
- php生成二维码带logo
- PHP生成名片、网址二维码
- PHP生成名片、网址二维码
- 使用PHP生成二维码的两种方法(带logo图像)
- PHP生成二维码【谷歌API+qrcode+圆角Logo】
- PHP生成二维码【谷歌API+qrcode+圆角Logo】
- php结合phpqrcode生成带图片LOGO的二维码