php下載微信頭像,並操作圖片合成水印
阿新 • • 發佈:2018-12-10
相信有很多小夥伴,在開發微信公眾號的時候有碰到過類似的問題 :
1.微信頭像的連結經過特殊處理的,下載後只能瀏覽,不能對他進行水印或者logo操作;
2.或者微信頭像下載的速度太慢了,需要十幾秒鐘,使用者體驗極差,雖然功能實現了,但是做不到使用者體驗優化;
之前有過類似的經歷,網上找了很多都沒有找到特別滿意的解決方案.最終找到了一個能高效處理微信頭像下載的文章 。話不多說 上“乾貨“啦:
<?php //$url, 微信頭像地址 //$new_file 儲存的頭像地址 private function getSecond($url,$new_file){ $header = array( 'User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:45.0) Gecko/20100101 Firefox/45.0', 'Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'Accept-Encoding: gzip, deflate',); // $url='http://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTKkGpNuUhaBniatRsiaG7ksqmhUWzkk40kTRS6icQS7kJcsfxcibQo7vDFcKibr7NHb9YIXiaXsEtLcdL6A/0'; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl, CURLOPT_ENCODING, 'gzip'); curl_setopt($curl, CURLOPT_HTTPHEADER, $header); $data = curl_exec($curl); $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); if ($code == 200) {//把URL格式的圖片轉成base64_encode格式的! $imgBase64Code = "data:image/jpeg;base64," . base64_encode($data); } $img_content=$imgBase64Code;//圖片內容 //echo $img_content;exit; if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $img_content, $result)) { $type = $result[2];//得到圖片型別png?jpg?gif? if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $img_content)))) { return $new_file; } } } ?>
接下來 就是用thinkphp 內建的水印合成啦
<?php // 合成新的圖片 $local_i_img = \think\Image::open($local_file); //下載到本地的微信頭像 $local_file //在這裡 $new_img 是新的路徑 // $watermark 水印圖片 //$data['postype'] 只是一個標誌位 判斷水印位置 switch ($data['postype']) { case 0: $local_i_img->water($watermark,\think\Image::WATER_CENTER)->save($new_img); break; case 1: $local_i_img->water($watermark,\think\Image::WATER_NORTHWEST)->save($new_img); break; case 2: $local_i_img->water($watermark,\think\Image::WATER_NORTHEAST)->save($new_img); break; case 3: $local_i_img->water($watermark,\think\Image::WATER_SOUTHEAST)->save($new_img); break; case 4: $local_i_img->water($watermark,\think\Image::WATER_SOUTHWEST)->save($new_img); break; } ?>
懂得小夥伴 記得點個贊喲!