上次,记录的《用php生成微信公众号带参数的二维码demo》
这次,加上logo显得正规一点,起码看起来不像诈骗二维码
接上,上次的公众号二维码(远程二维码地址)
// $wx_code = ‘https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=gQHB8DwAAAAAAAAAAS5odHRwOi8vd2VpeGluLnFxL5mNvbS9xLzAyMjJZRWhMdFpiRVAxQ1FCdWhCY0gAAgQ0FJ1lAwSAUQEA’;
// 把二维码图片下载下来
$imageInfo = $this->downloadImage($wx_code);
$imagename="/uploads/wxcode/qrcode".$member_id.".jpg";
$filename= dirname(BASE_UPLOAD_PATH).$imagename;// D:\phpstudy_pro\WWW\xxx\public/uploads/wxcode/qrcode26916.jpg
$local_file=fopen($filename,'w');
if(false !== $local_file){
if(false !== fwrite($local_file,$imageInfo["body"])){
fclose($local_file);
}
}
$logo = dirname(BASE_UPLOAD_PATH) . '/uploads/wxcode/logo.png';// 需要显示在二维码中的Logo图像
$qrcodelogo = "/uploads/wxcode/qrcodelogo" . $member_id . ".jpg";
$QRlogo = dirname(BASE_UPLOAD_PATH) . $qrcodelogo;// 合拼后带logo的二维码
if ($logo !== FALSE) {
$QR = imagecreatefromstring(file_get_contents($filename));//目标图象连接资源。
$logo = imagecreatefromstring(file_get_contents($logo)); //源图象连接资源。
$QR_width = imagesx($QR); //二维码图片宽度
$QR_height = imagesy($QR); //二维码图片高度
$logo_width = imagesx($logo); //logo图片宽度
$logo_height = imagesy($logo); //logo图片高度
$logo_qr_width = $QR_width / 4; //组合之后logo的宽度(占二维码的1/5)
$scale = $logo_width / $logo_qr_width; //logo的宽度缩放比(本身宽度/组合后的宽度)
$logo_qr_height = $logo_height / $scale; //组合之后logo的高度
$from_width = ($QR_width - $logo_qr_width) / 2; //组合之后logo左上角所在坐标点
//重新组合图片并调整大小
imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height);
imagepng($QR, $QRlogo);//带Logo二维码的文件名
}
// 删除没logo的二维码
@unlink($filename);
$wx_code = HTTP_TYPE . $_SERVER['HTTP_HOST'] . $qrcodelogo;// 带logo的二维码
// echo '<img src="' . $wx_code . '">';
// die;
HTTP_TYPE是我在thinkPHP框架定义的常量,就是判断网址是否为https
define('HTTP_TYPE', \think\Request::instance()->isSsl() ? 'https://' : 'http://');#是否为SSL
下载远程图片方法
private function downloadImage($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_NOBODY, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// curl_setopt($ch, CURLOPT_TIMEOUT, 60); //只需要设置一个秒的数量就可以
$package = curl_exec($ch);
$httpinfo = curl_getinfo($ch);
curl_close($ch);
return array_merge(array('body'=>$package),array('header'=>$httpinfo));
}
logo上的处理,可以使用jpg白底图片,再使用圆角图片生成器工具处理,视觉上更美观