项目需要,要生成带微信用户头像的二维码,谨此记录。首先抓取用户头像,没有自己造轮子自己封装微信接口sdk,我用了安正超大神的easywechat,这个sdk使用方便文档清晰,项目地址 https://easywechat.org。 然后选择生成二维码sdk,在github上找了一圈,最后选用 https://github.com/endroid/QrCode,原因这个star,fork最多
代码:
1、下载easywechatsdk代码 composer require "overtrue/wechat" 引用和配置信息,https://easywechat.org里面有详细的使用配置文档
$app = new Application($this->_options);
$userService = $app->user;
$user = $userService->get($uopenId);
$headimgurl = $user->headimgurl;
if(!$headimgurl){
$qrmid = UPLOAD_PATH . '/Weixin/hlogo/default1.png';
} else {
$content = file_get_contents($headimgurl); // 得到二进制图片内容
$im = imagecreatefromstring($content);
imagepng($im, UPLOAD_PATH . '/Weixin/hlogo/' . $uopenId . '.png', 2);
imagedestroy($im);
$qrmid = UPLOAD_PATH . '/Weixin/hlogo/' . $uopenId . '.png';
}
通过openid获取头像地址并保存到本地服务器(如果用户没有关注公众好获取不到头像地址则用默认的头像作为二维码的logo),由于生成二维码的logo的图片格式需要png格式,所以用imagepng保存用户头像为png格式到本地
2、生成带头像的二维码
用composer下载endroid代码,include_once引入 VENDER_PATH.'vendor/autoload.php'; 然后使用命名空间use Endroid\QrCode\QrCode;
$qrCode = new QrCode();
$qrCode->setText('https://www.baidu.com')
->setSize(300)
->setErrorCorrection('high')
->setForegroundColor(array('r' => 0, 'g' => 0, 'b' => 0, 'a' => 0))
->setBackgroundColor(array('r' => 255, 'g' => 255, 'b' => 255, 'a' => 0))
->setLogoSize(60)
->setLogo($qrmid);
$qrCode->render(UPLOAD_PATH . '/Weixin/hlogo/1.png');
1.png则为目标二维码