摘要:做過微信網(wǎng)頁開發(fā)的同學(xué)肯定遇到過這樣的需求,基于一張背景圖生成用戶推廣海報,上面需要有推廣二維碼用戶頭像用戶名稱等等。
做過微信網(wǎng)頁開發(fā)的同學(xué)肯定遇到過這樣的需求,基于一張背景圖生成用戶推廣海報,上面需要有推廣二維碼、用戶頭像、用戶名稱等等。本來應(yīng)該是一個很普通的需求,使用php的gd庫就很容易合成,但是最近在生成這樣海報的時候,發(fā)現(xiàn)時間長達19s,最后發(fā)現(xiàn)問題卡在遠程拉去微信頭像上,所以解決辦法有兩個。方法一
提前把用戶微信頭像下載下來保存在自己的服務(wù)器上,不過我使用七牛云,然后自己服務(wù)器又保存一堆用戶頭像,覺得太糟糕了,所以拋棄。
方法二使用隊列,因為使用laravel,所以很容易就可以把這種費時的任務(wù)放到后臺,自己去跑吧。剛開始采用這種方法,后來發(fā)現(xiàn),如果用戶操作很快,一下就跑到生成海報的那一步,可能隊列還沒有跑完,或者隊列失敗了。所以某種程度上會給用戶一種懵逼的感覺,不知道怎么就沒有生成。
方法三那就優(yōu)化一下下載圖片的速度好了。
在stackoverflow上找到一個帖子,《php - Get compressed contents using cURL》,里面說到給curl加一下參數(shù),從而達到壓縮傳輸?shù)淖饔?,試了一下,果然起作用,又后來?9s多,變成了1.3s左右。
簡單寫一下代碼(偽代碼):
基于laravel,使用了laravel-wechat, 圖片處理使用intervention/image獲取遠程圖片內(nèi)容:
//curl 沒有做錯誤處理 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, ""); //加速 這個地方留空就可以了 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); }
當然了,我搜了一下“為什么下載微信頭像會這么慢”,有很多大神分析和dns解析有關(guān)系,可以先解析成ip,然后在設(shè)置curl參數(shù),當然也可以。解決問題方式其實還是挺多的。
使用intervention/image的坑這個坑可能有的人不會遇到,因為和這個package無關(guān),而是和自己的php環(huán)境有關(guān)
如果你自己升級過php版本,然后沒有使用imagick,默認使用gd庫,那么很有可能中遇到Call to undefined function imagecreatefromjpeg()和不支持FreeType 2等一些問題。后來才知道編譯安裝過程中少了:
--with-freetype-dir=DIR --with-jpeg-dir=DIR
所以重新編譯php就可以了。當然如果你不使用gd庫的話,那就不會出問題了,intervention/image默認配置使用的就是gd庫,可以自己修改。
參考文章http://php.net/manual/zh/imag...
https://stackoverflow.com/que...
https://stackoverflow.com/que...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28771.html
摘要:一微信公眾平臺配置獲取,添加白名單登錄微信公眾平臺,進入基本配置。二后端實現(xiàn)微信開放接口全局返回碼說明參考獲取全局此有效期為小時,可以暫存起來,過期后需要重新獲取。用戶關(guān)注時間,為時間戳。 一、微信公眾平臺配置 1. 獲取appid, appsecret,添加白名單 登錄微信公眾平臺,進入基本配置。開發(fā)中需要用到兩個參數(shù),appId和appSecret(appSecret只展示一次,需...
摘要:一微信公眾平臺配置獲取,添加白名單登錄微信公眾平臺,進入基本配置。二后端實現(xiàn)微信開放接口全局返回碼說明參考獲取全局此有效期為小時,可以暫存起來,過期后需要重新獲取。用戶關(guān)注時間,為時間戳。 一、微信公眾平臺配置 1. 獲取appid, appsecret,添加白名單 登錄微信公眾平臺,進入基本配置。開發(fā)中需要用到兩個參數(shù),appId和appSecret(appSecret只展示一次,需...
摘要:最近做一個有關(guān)微信授權(quán)登錄的項目,關(guān)于授權(quán)就不多說了,我獲取到用戶基本信息格式如下花椒杭州浙江中國直接把入庫保存,來了。 最近做一個有關(guān)微信授權(quán)登錄的項目,關(guān)于授權(quán)就不多說了,我獲取到用戶基本信息,格式如下: $user_info = {openid:xx,nickname:nice花椒.,sex:2,language:zh_CN,city:杭州,province:浙江,country...
摘要:注意如果用戶一開始沒有微信授權(quán),生成海報時又必須要用戶頭像不能使用默認的話,那就只能老老實實走之前的流程了。組件名稱終端類型微信版本觸發(fā)方法關(guān)于的調(diào)用方法相冊權(quán)限需要你提供保存相冊權(quán)限獲取相冊權(quán)限成功,給出再次點擊圖片保存到相冊的提示。 showImg(https://segmentfault.com/img/bVbs5V8?w=343&h=517);海報生成示例 海報生成速度緩慢...
wordpress主題 modown 6.2+Erphpdown 11.7虛擬素材資源付費下載源碼名稱:WordPress主題 modown 6.2+Erphpdown 11.7虛擬素材資源付費下載兼容版本:全部版本適配編碼:GBK BIG5 UTF8SC UTF8TC演示地址:http://demo.mobantu.com/modown/(官方演示站,以截圖為準)安裝環(huán)境:安裝要求:PHP 5....
閱讀 3769·2021-11-24 10:46
閱讀 1732·2021-11-15 11:38
閱讀 3799·2021-11-15 11:37
閱讀 3551·2021-10-27 14:19
閱讀 2001·2021-09-03 10:36
閱讀 2028·2021-08-16 11:02
閱讀 3030·2019-08-30 15:55
閱讀 2288·2019-08-30 15:44