1. 程式人生 > >php下載微信頭像,並操作圖片合成水印

php下載微信頭像,並操作圖片合成水印

相信有很多小夥伴,在開發微信公眾號的時候有碰到過類似的問題 :

 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;
    }


?>

懂得小夥伴 記得點個贊喲!