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