小程序canvas繪圖完整篇

這是我第二次畫海報蔗坯,完成后決定把整個流程寫下來,供大家一起學習,不對的地方也請大家熱心指教~
1.先給海報在頁面上規(guī)定好寬高

       <!-- 畫布大小按需定制  -->
<canvas canvas-id="springCanvas" style="width:328px;height:582px"></canvas>   

canvas-id一定要寫雳灵,這就是海報要繪制的地方
如果不想看到繪制過程或效果类嗤,可以將canvas隱藏起來糊肠,我是這么寫的

       <!-- 畫布大小按需定制  -->
<view style='width:0px;height:0px;overflow:hidden;'>
    <canvas canvas-id="springCanvas" style="width:328px;height:582px"></canvas>   
</view> 

(如果有更好的方法,歡迎大家一起來討論)
調(diào)試的時候我沒有隱藏遗锣,因為可以直觀的看到效果圖進行修改完善
2.點擊“保存海報”時觸發(fā)canvas事件

<!--wxml文件-->
<div @tap="savePoster">保存海報</div>
<!--js文件-->
/*        
* 保存海報
*/
savePoster() {            
   var that = this;        
   this.drawCanvas();//調(diào)用繪制函數(shù)
   wx.showLoading({
   title: '努力生成中...'
   });
}
/**
* 繪制圖片和文本
* 
*/
drawCanvas(){
   var that = this;
    //得到背景圖片
    let promise1 = new Promise(function(resolve,reject){
          wx.getImageInfo({
          src:'圖片地址',
          success:function(res){
               resolve(res);
          },
          fail:function(res){
                reject(res);
           }
           })
     })
     let promise2 = new Promise(function(resolve,reject){
          wx.getImageInfo({
               src:'圖片地址',
                    success:function(res){
                        resolve(res);
                    },
                    fail:function(res){
                        reject(res);
                    }
                })
       })
       //成功得到圖片信息后货裹,開始繪圖
      Promise.all([promise1, promise2])                        
            .then(res=>{
                wx.downloadFile({    //網(wǎng)絡(luò)圖片需要先下載到本地
                    url:'圖片地址',
                    success(res) {
                        // 只要服務(wù)器有響應(yīng)數(shù)據(jù),就會把響應(yīng)內(nèi)容寫入文件并進入 success 回調(diào)精偿,業(yè)務(wù)需要自行判斷是否下載到了想要的內(nèi)容
                        if (res.statusCode === 200) {
                            const ctx = wx.createCanvasContext('springCanvas')
                            ctx.drawImage(res.tempFilePath, 0, 0, 328, 582);
                            ctx.draw()
                            wx.downloadFile({    //下載第二張網(wǎng)絡(luò)圖片
                                url:'圖片地址',
                                success(res){
                                    if (res.statusCode === 200) {
                                        ctx.drawImage(res.tempFilePath,11,44,305,25)
                                        ctx.draw(true)
                                        //開始繪制文字
                                        ctx.setTextAlign('center')  //居中
                                        ctx.setFontSize(16)   //字號
                                        ctx.setFillStyle('rgba(141,23,0,1)')  //字體顏色
                                        ctx.fillText(that.renderData.orgName, 165, 61)
                                        ctx.draw(true)  //設(shè)為true時弧圆,不會擦除之前繪制的內(nèi)容
                                        ctx.setFillStyle('white')
                                        ctx.fillRect(220, 480, 80, 80) //繪制白色矩形 
                                        ctx.draw(true,setTimeout(function(){
                                            wx.canvasToTempFilePath({
                                            x:0,
                                            y:0,
                                            width:328,
                                            height:582,
                                            destWidth: 328,
                                            destHeight: 582,
                                            canvasId:'springCanvas',
                                            success:function(res){
                                                console.log('res.tempFilePath'+res.tempFilePath);            
                                                that.preurl=res.tempFilePath,  //該路徑為生成海報圖片的臨時路徑         
                                                wx.hideLoading()
                                                that.saveToAlbum()  //保存到相冊
                                            },
                                            fail:function(res){
                                                console.log(res)
                                            }
                                            })
                                            },2000))
                                        }
                                    }
                                })
                             }
                        }
                    })    
            }).catch(function(error) {
                    console.log(error)
                })

        },
        /**
        * 保存到相冊
        */
        saveToAlbum: function() {
            var that = this
            // 生產(chǎn)環(huán)境時 記得這里要加入獲取相冊授權(quán)的代碼
            // 可以通過 wx.getSetting 先查詢一下用戶是否授權(quán)了 "scope.writePhotosAlbum" 這個 scope
            wx.getSetting({
                success(res) {
                if (!res.authSetting['scope.writePhotosAlbum']) {
                    wx.authorize({
                        scope: 'scope.writePhotosAlbum',
                        success() {
                        // 用戶已經(jīng)同意小程序相冊功能赋兵,后續(xù)調(diào)用 wx.saveImageToPhotosAlbum 接口不會彈窗詢問
                        that.startSaveImage()
                        }
                    })
                } else {
                    that.startSaveImage()
                }
                }
            })
        },

        startSaveImage() {
            let that = this
            wx.saveImageToPhotosAlbum({
                filePath: that.preurl,
                success(res) {
                }
            })

        },

OK,到這里搔预,海報已繪制完成并下載到相冊(包括網(wǎng)絡(luò)圖片的下載和繪制霹期,文字的繪制,矩形的繪制)拯田。
下一篇將會寫關(guān)于繪制海報時文字換行問題历造,請大家多多關(guān)注~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市船庇,隨后出現(xiàn)的幾起案子吭产,更是在濱河造成了極大的恐慌,老刑警劉巖鸭轮,帶你破解...
    沈念sama閱讀 216,919評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件臣淤,死亡現(xiàn)場離奇詭異,居然都是意外死亡张弛,警方通過查閱死者的電腦和手機荒典,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吞鸭,“玉大人寺董,你說我怎么就攤上這事】贪” “怎么了遮咖?”我有些...
    開封第一講書人閱讀 163,316評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長造虏。 經(jīng)常有香客問我御吞,道長,這世上最難降的妖魔是什么漓藕? 我笑而不...
    開封第一講書人閱讀 58,294評論 1 292
  • 正文 為了忘掉前任陶珠,我火速辦了婚禮,結(jié)果婚禮上享钞,老公的妹妹穿的比我還像新娘揍诽。我一直安慰自己,他們只是感情好栗竖,可當我...
    茶點故事閱讀 67,318評論 6 390
  • 文/花漫 我一把揭開白布暑脆。 她就那樣靜靜地躺著,像睡著了一般狐肢。 火紅的嫁衣襯著肌膚如雪添吗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評論 1 299
  • 那天份名,我揣著相機與錄音碟联,去河邊找鬼妓美。 笑死,一個胖子當著我的面吹牛玄帕,可吹牛的內(nèi)容都是我干的部脚。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼裤纹,長吁一口氣:“原來是場噩夢啊……” “哼委刘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起鹰椒,我...
    開封第一講書人閱讀 38,964評論 0 275
  • 序言:老撾萬榮一對情侶失蹤锡移,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后漆际,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淆珊,經(jīng)...
    沈念sama閱讀 45,376評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,592評論 2 333
  • 正文 我和宋清朗相戀三年奸汇,在試婚紗的時候發(fā)現(xiàn)自己被綠了施符。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,764評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡擂找,死狀恐怖戳吝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贯涎,我是刑警寧澤听哭,帶...
    沈念sama閱讀 35,460評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站塘雳,受9級特大地震影響陆盘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜败明,卻給世界環(huán)境...
    茶點故事閱讀 41,070評論 3 327
  • 文/蒙蒙 一隘马、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧妻顶,春花似錦酸员、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽醇王。三九已至呢燥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寓娩,已是汗流浹背叛氨。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評論 1 269
  • 我被黑心中介騙來泰國打工呼渣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人寞埠。 一個月前我還...
    沈念sama閱讀 47,819評論 2 370
  • 正文 我出身青樓屁置,卻偏偏與公主長得像,于是被迫代替她去往敵國和親仁连。 傳聞我的和親對象是個殘疾皇子蓝角,可洞房花燭夜當晚...
    茶點故事閱讀 44,665評論 2 354

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

  • 【Android 自定義View之繪圖】 基礎(chǔ)圖形的繪制 一、Paint與Canvas 繪圖需要兩個工具饭冬,筆和紙使鹅。...
    Rtia閱讀 11,667評論 5 34
  • 業(yè)務(wù)中碰到微信小程序需要生成海報進行朋友圈分享,這個是非常常見的功能昌抠,沒想到實際操作的時候花了整整一天一夜才搞好患朱,...
    和牛閱讀 2,709評論 0 4
  • 一:canvas簡介 1.1什么是canvas? ①:canvas是HTML5提供的一種新標簽 ②:HTML5 ...
    GreenHand1閱讀 4,681評論 2 32
  • Android中使用圖形處理引擎炊苫,2D部分是android SDK內(nèi)部自己提供裁厅,3D部分是用Open GL ES ...
    溫暖的外星閱讀 3,171評論 2 10
  • 馬上就要度過18個春夏秋冬了,只是我的人生好像還是一個小孩子一樣侨艾。我習慣于依賴我能依賴的人执虹,習慣于依靠可以依...
    YESHIIS閱讀 199評論 0 1