一、Canvas應(yīng)用的背景(個人理解)及基礎(chǔ)語法 背景 從2012年開始,微信那個時候用戶的積累的量已經(jīng)非常大了,推出公眾號,當然大屏智能手機在那個時候也流行,傳統(tǒng)的大眾媒體逐步消亡,像微信公眾號這樣的新媒體盛行。企業(yè)的廣告投入開始從電視等傳統(tǒng)媒體向基于圈層文化的新媒體精準營銷轉(zhuǎn)移,甚至很多企業(yè)尤其互聯(lián)網(wǎng)企業(yè)開始思考如何利用用戶的自傳播這種方式去宣傳企業(yè)、實現(xiàn)商業(yè)目標。而用戶的自傳播很好的途徑就是生產(chǎn)個性化的海報。舉個最常見的例子,我第一次使用Keep是因為在朋友圈看到朋友分享她運動量的一個截圖,當時在我看來非??幔行穆拭}搏呀、時速運動量啊、消耗的卡路里等,還有一個二維碼,然后我就點了下載了Keep,這整個獲客成本幾乎為0,秒秒鐘就多了一個用戶。而實現(xiàn)這一過程的技術(shù)手段就可以用canvas。所以,canvas的盛行,與企業(yè)的精準營銷和用戶的自傳播有很大的關(guān)系。 如極客時間的一些實現(xiàn)案例: 大家看第一張圖的話是在2017年末的時候,Qcon全球軟件開發(fā)大會預(yù)熱階段的海報。然后我們?yōu)槌绦騿T做了一個生成2018年關(guān)鍵字的一張海報,文案都非常有趣啊。第二張的話是在2018年元旦的時候做的極客時間助手,這個小程序當初主要是為程序員做的2018年新年簽。那面就是一些極客時間的專欄,包括用戶留言,你留言隨手可以生成一張海報,可以轉(zhuǎn)發(fā)等等大概就是這樣。 基礎(chǔ)語法 Canvas本質(zhì)是一個可以使用腳本(通常為JavaScript)來繪制圖形的 HTML 元素,默認大小為300像素×150像素(寬×高,像素的單位是px),通過JavaScript上下文對象動態(tài)創(chuàng)建圖像。比如,畫線、畫矩形、涂顏色甚至生成帶二維碼的海報。原理就是一筆一筆的畫,畫一條橫線,再畫一條橫線等等,就是不斷地創(chuàng)建路徑、繪制路徑,然后把這個路徑封閉起來可以涂色之類的,他的底層的封裝就是放到一個數(shù)組里形成一個路徑的數(shù)組,將這個數(shù)組傳到j(luò)s底層的一個方法,然后去繪制。 舉個栗子:畫一個頭像 首先,你需要把這張圖片畫canvas上面,比如說你畫你這個頭像就是正方形,就在(0,0)開始畫一個圖片。那么你在這個圖片的中心,作為原點,然后你畫一個圓形。然后你再利用canvas語法畫一個圓弧,在這個圓弧路徑以外設(shè)置不可見以內(nèi)設(shè)置可見,這個時候就形成了一個圓形頭像。 <canvas id="canvas" width="300" height="300"></canvas> <script> const canvas = document.getElementById('canvas') const ctx = canvas.getContext('2d') const img = new Image() img.onload = function() { circleImg(ctx, img, 100, 100, 50) } img.src="https://avatar-static.segmentfault.com/289/811/2898115528-58c35e9b79717_big64" function circleImg(ctx, img, x, y, r) { ctx.save() let d = 2 * r let cx = x + r let cy = y + r ctx.arc(cx, cy, r, 0, 2 * Math.PI) ctx.stroke(); ctx.clip() ctx.drawImage(img, x, y, d, d) ctx.restore() } |
// 微信小程序中的[canvas](https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html)與HTML5的canvas在語法有些區(qū)別,比如API就不一樣, // 另外小程序中的canvas因為是原生組件的層級是最高的,所以頁面中的其他組件無論設(shè)置 z-index 為多少,都無法覆蓋原生組件 </script> 二、常用的"生成海報"的方式我們會經(jīng)常在朋友圈看到什么算命、性格分析、測算你的智商、情商等等這些東西,都是由用戶分享出一張圖片(海報),這個圖片就是用canvas做成的,上面畫了二維碼,二維碼是一個數(shù)組兩個或循環(huán)嵌套畫小黑點用戶識別這個二維碼之后就進入他的程序,經(jīng)過程序跑出來的測試結(jié)果啊什么的,點保存的時候,就會生成一張個性海報明白。怎么生成這種個性化海報呢? 2.1 字符串模板此處應(yīng)有案例
主要實現(xiàn):與服務(wù)端約定好數(shù)據(jù)格式-->前端做好模板-->服務(wù)端用第三方工具渲染返回到客戶端img 2.2 canvas繪制
案例: '極客時間小助手'小程序
三、極客時間小程序-生成各種海報的解決方案微信小程序canvas與HTM5的canvas對比
如何導(dǎo)出高清海報、如何封裝;
|