濮阳杆衣贸易有限公司

主頁 > 知識(shí)庫 > php curl優(yōu)化下載微信頭像的方法總結(jié)

php curl優(yōu)化下載微信頭像的方法總結(jié)

熱門標(biāo)簽:神龍斗士電話機(jī)器人 代理打電話機(jī)器人 電信外呼系統(tǒng)多少錢一個(gè)月 企業(yè)400電話辦理多少費(fèi)用 宿州正規(guī)外呼系統(tǒng)軟件 桂陽公司如何做地圖標(biāo)注 太原400電話申請(qǐng)流程 合肥企業(yè)外呼系統(tǒng)線路 萍鄉(xiāng)商鋪地圖標(biāo)注

curl是什么

百度百科給的解釋是:數(shù)據(jù)傳輸神器。那它神器在什么地方那,通過查找資料得出curl可以使用url的語法模擬瀏覽器來傳輸數(shù)據(jù),因?yàn)槭悄M瀏覽器所以它支持多種的網(wǎng)絡(luò)協(xié)議。目前支持http、https、ftp、gopher、telnet、dict、file和ldap協(xié)議。libcurl同時(shí)也支持HTTPS認(rèn)證、HTTP POST、HTTP PUT、 FTP 上傳(這個(gè)也能通過PHP的FTP擴(kuò)展完成)、HTTP 基于表單的上傳、代理、cookies和用戶名+密碼的認(rèn)證。

php中使用最多的是通過curl來模擬get和post請(qǐng)求。

引言

做過微信網(wǎng)頁開發(fā)的同學(xué)肯定遇到過這樣的需求,基于一張背景圖生成用戶推廣海報(bào),上面需要有推廣二維碼、用戶頭像、用戶名稱等等。本來應(yīng)該是一個(gè)很普通的需求,使用php的gd庫就很容易合成,但是最近在生成這樣海報(bào)的時(shí)候,發(fā)現(xiàn)時(shí)間長(zhǎng)達(dá)19s,最后發(fā)現(xiàn)問題卡在遠(yuǎn)程拉去微信頭像上,所以解決辦法有兩個(gè)。

方法一

提前把用戶微信頭像下載下來保存在自己的服務(wù)器上,不過我使用七牛云,然后自己服務(wù)器又保存一堆用戶頭像,覺得太糟糕了,所以拋棄。

方法二

使用隊(duì)列,因?yàn)槭褂胠aravel,所以很容易就可以把這種費(fèi)時(shí)的任務(wù)放到后臺(tái),自己去跑吧。剛開始采用這種方法,后來發(fā)現(xiàn),如果用戶操作很快,一下就跑到生成海報(bào)的那一步,可能隊(duì)列還沒有跑完,或者隊(duì)列失敗了。所以某種程度上會(huì)給用戶一種懵逼的感覺,不知道怎么就沒有生成。

方法三

那就優(yōu)化一下下載圖片的速度好了。

在stackoverflow上找到一個(gè)帖子,《php - Get compressed contents using cURL》,里面說到給curl加一下參數(shù),從而達(dá)到壓縮傳輸?shù)淖饔?,試了一下,果然起作用,又后來?9s多,變成了1.3s左右。

簡(jiǎn)單寫一下代碼(偽代碼):

基于laravel,使用了laravel-wechat, 圖片處理使用intervention/image

獲取遠(yuǎn)程圖片內(nèi)容:

//curl 沒有做錯(cuò)誤處理
 static public function getImage(string $url )
 {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_ENCODING, ""); //加速 這個(gè)地方留空就可以了
  curl_setopt($ch, CURLOPT_HEADER, 0);
  $output = curl_exec($ch);
  curl_close($ch);
  return $output;
 }

合成圖片

 static public function poster(User $user, Activity $activity )
 {


  $img = Image::make(public_path() . $activity->poster_base_img_url);
  //$img = Image::make(public_path() .'/wechat.jpg');

  $img->text(
   $user->nickname, 180, 1060, function( $font ) {
   $font->file(public_path() . '/simhei.ttf'); //字體設(shè)置
   $font->size(28);
   $font->color('#fff');
   $font->align("center");
  }
  );

  $avatar = Image::make(static::getImage($user->avatar))->resize(182, 182);

  $img->insert($avatar, 'bottom-left', 95, 200);

  $fileName = str_random(16) . '.jpg';
  
  //可以保存到本地,或者上傳到七牛
 
  $img->save($filePath, 70);
 }

當(dāng)然了,我搜了一下“為什么下載微信頭像會(huì)這么慢”,有很多大神分析和dns解析有關(guān)系,可以先解析成ip,然后在設(shè)置curl參數(shù),當(dāng)然也可以。解決問題方式其實(shí)還是挺多的。

使用intervention/image的坑

這個(gè)坑可能有的人不會(huì)遇到,因?yàn)楹瓦@個(gè)package無關(guān),而是和自己的php環(huán)境有關(guān)
如果你自己升級(jí)過php版本,然后沒有使用imagick,默認(rèn)使用gd庫,那么很有可能中遇到Call to undefined function imagecreatefromjpeg()和不支持FreeType 2等一些問題。后來才知道編譯安裝過程中少了:

--with-freetype-dir=DIR --with-jpeg-dir=DIR

所以重新編譯php就可以了。當(dāng)然如果你不使用gd庫的話,那就不會(huì)出問題了,intervention/image默認(rèn)配置使用的就是gd庫,可以自己修改。

參考文章

http://php.net/manual/zh/imag...

https://stackoverflow.com/que...

https://stackoverflow.com/que...

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

您可能感興趣的文章:
  • 常見的5個(gè)PHP編碼小陋習(xí)以及優(yōu)化實(shí)例講解
  • PHP優(yōu)化之批量操作MySQL實(shí)例分析
  • PHP+MySQL實(shí)現(xiàn)對(duì)一段時(shí)間內(nèi)每天數(shù)據(jù)統(tǒng)計(jì)優(yōu)化操作實(shí)例
  • php中10個(gè)不同等級(jí)壓縮優(yōu)化圖片操作示例
  • Nginx使用的php-fpm的兩種進(jìn)程管理方式及優(yōu)化
  • PHP安全配置優(yōu)化詳解

標(biāo)簽:廊坊 綏化 衡陽 鄂州 崇左 白銀 辛集 太原

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《php curl優(yōu)化下載微信頭像的方法總結(jié)》,本文關(guān)鍵詞  php,curl,優(yōu)化,下載,微信,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《php curl優(yōu)化下載微信頭像的方法總結(jié)》相關(guān)的同類信息!
  • 本頁收集關(guān)于php curl優(yōu)化下載微信頭像的方法總結(jié)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    惠州市| 赤壁市| 东辽县| 山阴县| 东平县| 金坛市| 古浪县| 江达县| 涟源市| 出国| 周口市| 东阳市| 清徐县| 利川市| 平谷区| 龙门县| 镇雄县| 宝应县| 濉溪县| 涟水县| 连城县| 莱西市| 绥宁县| 垦利县| 龙州县| 马龙县| 且末县| 托克逊县| 安塞县| 屯昌县| 乌海市| 应用必备| 蕉岭县| 抚松县| 河西区| 东乡族自治县| 石屏县| 海淀区| 福建省| 公安县| 临洮县|