小程序Canvas使用及注意事項(xiàng)

前言

公司的小程序項(xiàng)目已經(jīng)成功上線涩哟,這期間也踩過不少坑埋虹,影響最深刻的就是canvas,做過海報分享的童鞋應(yīng)該都懂朴皆,微信小程序本身是不支持分享到朋友圈這種操作的帕识,所以就需要我們自己來實(shí)現(xiàn)canvas繪制海報并保存到本地相冊,那么接下來就總結(jié)一下canvas的使用和本人在寫canvas時踩過的一些坑车荔。

初識canvas

關(guān)于canvas的描述渡冻,官網(wǎng)寫的很清楚,我就不在贅述了忧便,直接上圖匆篓。附上官網(wǎng)鏈接https://developers.weixin.qq.com/miniprogram/dev/component/canvas.html

canvas

使用canvas的準(zhǔn)備工作

1.我們必須在wxml中定義一個canvas標(biāo)簽寞蚌,并給他一個canvas-id
<canvas canvas-id='customCanvas'></canvas>
2.在js文件中拿到canvas的context
var ctx = wx.createCanvasContext('customCanvas')

準(zhǔn)備工作完成之后浩嫌,我們就可以開始做一系列操作葬馋,比如繪制文本,繪制圖片等等

注意:以下步驟都是基于以上兩步進(jìn)行操作

繪制文本fillText

 ctx.setFillStyle('#5F6FEE')//文字顏色:默認(rèn)黑色
 ctx.setFontSize(20)//設(shè)置字體大小蒂教,默認(rèn)10
 ctx.fillText("LXT", 20, 20)//繪制文本
 //調(diào)用draw()開始繪制
ctx.draw()
效果展示
*****注意事項(xiàng)*****

如果有的童鞋巍举,在調(diào)用fillText的時候,x和y都給0的話凝垛,文本是看不到的懊悯!

繪制圖片drawImage

ctx.drawImage("../../res/suolong.jpeg",0,0,100,150)
ctx.draw()
效果展示
*****這里我們說一下imageResource,大家可以看到梦皮,我用的是本地圖片炭分,直接傳入地址即可,但是如果大家想繪制網(wǎng)絡(luò)圖片的話剑肯,我們就要使用另外一種方式*****

首先我們要調(diào)用wx.getImageInfo拿到網(wǎng)絡(luò)圖片的信息捧毛,然后傳入res.path進(jìn)行繪制

 wx.getImageInfo({
      src: 'http://yuntu-img-new.oss-cn-shanghai-finance-1-pub.aliyuncs.com/applyCard/share/card_sahre_bg.png',
      success(res){
        ctx.drawImage(res.path,0,0,100,100)
        ctx.draw()
      }
    })

繪制圓形圖片

這個需求相信大家都不會陌生,一般用于繪制用戶的頭像,如果你們后臺返回給你的圖片就是圓形呀忧,那么恭喜你师痕,直接drawImage即可,但是如果后臺給的是非圓形而账,那么就需要你自己來做一個裁剪了胰坟。

    ctx.save()//保存當(dāng)前的繪圖上下文。
    ctx.beginPath()//開始創(chuàng)建一個路徑
    ctx.arc(50, 50, 50, 0, 2 * Math.PI,false)//畫一個圓形裁剪區(qū)域
    ctx.clip()//裁剪
    ctx.drawImage("../../res/suolong.jpeg",0,0, 100, 100)//繪制圖片
    ctx.restore()//恢復(fù)之前保存的繪圖上下文
    ctx.draw()//繪制到canvas

這里為了演示效果福扬,我把背景色換成了黑色

arc方法說明

保存canvas到相冊

經(jīng)過一系列繪制操作腕铸,我們最終要把繪制的圖片保存到用戶相冊惜犀。官方給的方法是先用canvasToTempFilePath生成一張圖片铛碑,在調(diào)用saveImageToPhotosAlbum保存到相冊,我們調(diào)用一下試試看

  wx.canvasToTempFilePath({
          canvasId: 'customCanvas',
          success(res) {
            wx.authorize({
              scope: 'scope.writePhotosAlbum',
              success() {
                wx.saveImageToPhotosAlbum({
                  filePath: res.tempFilePath,
                  success() {
                    wx.showToast({
                      title: '圖片保存成功'
                    })
                  }
                })
              }
            })
          }
        }, this)
*****注意虽界,這里坑來了汽烦,如果我們調(diào)用上面的方法,確實(shí)可以保存到本地莉御,沒有任何問題撇吞,但是,我們看不到背景色

所以我們要在canvasToTempFilePath中加上一個參數(shù)礁叔, fileType: 'jpg'即可解決

canvas滑動問題

這個問題是我在做的時候發(fā)現(xiàn)的牍颈,因?yàn)槲依L制的圖片超出了一屏的高度而且需要給這個canvas添加一個長按事件,所以導(dǎo)致滑動卡頓甚至不可滑動琅关,經(jīng)過各種嘗試煮岁,最終得出的結(jié)論是,不要把事件放在canvas上涣易,可以在canvas外面套一層view画机,把事件放到view上面即可解決。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末新症,一起剝皮案震驚了整個濱河市步氏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌徒爹,老刑警劉巖荚醒,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異隆嗅,居然都是意外死亡界阁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門榛瓮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铺董,“玉大人,你說我怎么就攤上這事【” “怎么了坝锰?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長重付。 經(jīng)常有香客問我顷级,道長,這世上最難降的妖魔是什么确垫? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任弓颈,我火速辦了婚禮,結(jié)果婚禮上删掀,老公的妹妹穿的比我還像新娘翔冀。我一直安慰自己,他們只是感情好披泪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布纤子。 她就那樣靜靜地躺著,像睡著了一般款票。 火紅的嫁衣襯著肌膚如雪控硼。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天艾少,我揣著相機(jī)與錄音卡乾,去河邊找鬼。 笑死缚够,一個胖子當(dāng)著我的面吹牛幔妨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播潮瓶,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼陶冷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了毯辅?” 一聲冷哼從身側(cè)響起埂伦,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎思恐,沒想到半個月后沾谜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胀莹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年基跑,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片描焰。...
    茶點(diǎn)故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡媳否,死狀恐怖栅螟,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情篱竭,我是刑警寧澤力图,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站掺逼,受9級特大地震影響吃媒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吕喘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一赘那、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧氯质,春花似錦募舟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梁肿。三九已至蜓陌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吩蔑,已是汗流浹背钮热。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留烛芬,地道東北人隧期。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像赘娄,于是被迫代替她去往敵國和親仆潮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1 Canvas接口元素定義 1.1 getContext()方法 為了在canvas上繪制遣臼,你必須先得到一個畫布...
    Kevin_Junbaozi閱讀 1,294評論 1 2
  • 1性置、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地?cái)?shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,969評論 3 119
  • 一:canvas簡介 1.1什么是canvas? ①:canvas是HTML5提供的一種新標(biāo)簽 ②:HTML5 ...
    GreenHand1閱讀 4,674評論 2 32
  • ??HTML5 添加的最受歡迎的功能就是 元素。這個元素負(fù)責(zé)在頁面中設(shè)定一個區(qū)域屏歹,然后就可以通過 JavaScri...
    霜天曉閱讀 3,000評論 0 2
  • 你在命運(yùn)里招手 呼喚我一起在云上流浪 飄來飄去 有傘的日子里 你在陽光下奔跑 笑臉如花 下雨的時候你就在我身邊 我...
    冬雨的陶閱讀 303評論 0 4