微信公众号PHP生成二维码海报的几个小扩展
- 3836
- PHP
- 0
- super_dodo
- 2019/07/03
往微信公众平台生成的二维码中间加入公众号logo、远程下载图片到本地、PHP启用gzip输出、PHP提前输出结果等,示例和方法都如下,请各位自行尝试。
###往微信公众平台生成的二维码中间加入公众号logo /** * 二维码内部新增LOGO * @param [string] $QR 二维码地址 * @param [string] $logo 公众号logo * @param [string] $save_img 存储地址 * @return 已订阅返回true 没有订阅返回false */ function createQRLogo($QR,$logo,$save_img) { $errorCorrectionLevel = 'L';//容错级别 $matrixPointSize = 6;//生成图片大小 $QR = imagecreatefromstring(file_get_contents($QR)); $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 / 5; $scale = $logo_width/$logo_qr_width; $logo_qr_height = $logo_height/$scale; $from_width = ($QR_width - $logo_qr_width) / 2; //重新组合图片并调整大小 imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); //保存图片 imagejpeg ($QR,$save_img,90); imagedestroy($QR); return true; } createQRLogo('qrcode.png','logo.jpg','new.jpg'); ###远程下载图片到本地 /** * 下载远程文件到本地 * @param [string] $url 文件远程地址 * @param [string] $file_path 文件本地存储路径 * @author xu * @copyright 2018-11-14 */ function download($url, $file_path) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $file = curl_exec($ch); curl_close($ch); $handle = @fopen($file_path, 'a'); fwrite($handle, $file); fclose($handle); } $images = [ 'http://thirdwx.qlogo.cn/mmopen/abc.png', ]; foreach ( $images as $url ) { download($url,'a.jpg'); } ###PHP启用gzip输出 - 有时候输出的页面非常大会自动分块chunked不如压缩以后传输会更快 ###如果页面5m采用gzip的话可以变位1m左右 // 将文本gz压缩后缓存起来输出 - 静态化常用 $str = 'abc'; $gz = gzopen ('tmp.gz','w9' ); gzwrite ($gz,$str); gzclose ($gz); header("Content-Encoding: gzip"); header("Vary: Accept-Encoding"); echo file_get_contents('tmp.gz'); die; // 字符串直接压缩后输出 $str = 'abc'; $str = gzencode($str,9); header("Content-Encoding: gzip"); header("Vary: Accept-Encoding"); echo $str; ###PHP提前输出结果 - 微信服务器在限定时间内未收到响应会重复发送请求 ###生成图片比较慢的话就要提前输出空字符串避免微信服务器重试 // 提前输出 ob_end_clean(); header("Connection: close"); header("HTTP/1.1 200 OK"); // 如果前端要的是json则添加,默认是返回的html/text header("Content-Type: application/json;charset=utf-8"); ob_start(); echo 'hello world.';// 防止微信服务器重复请求 $size = ob_get_length(); header("Content-Length: $size"); ob_end_flush(); flush(); if (function_exists("fastcgi_finish_request")) { fastcgi_finish_request(); } // 在关闭连接后,继续运行php脚本 ignore_user_abort(true); set_time_limit(0); sleep(100);
人生不设限,一切皆有可能,竭尽全力,方有可成。
相关阅读
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
热门文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
最新文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例