美文网首页
小程序canvas绘图完整篇

小程序canvas绘图完整篇

作者: 好奇的猫猫猫 | 来源:发表于2019-01-25 15:37 被阅读0次

    这是我第二次画海报,完成后决定把整个流程写下来,供大家一起学习,不对的地方也请大家热心指教~
    1.先给海报在页面上规定好宽高

           <!-- 画布大小按需定制  -->
    <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> 
    

    (如果有更好的方法,欢迎大家一起来讨论)
    调试的时候我没有隐藏,因为可以直观的看到效果图进行修改完善
    2.点击“保存海报”时触发canvas事件

    <!--wxml文件-->
    <div @tap="savePoster">保存海报</div>
    <!--js文件-->
    /*        
    * 保存海报
    */
    savePoster() {            
       var that = this;        
       this.drawCanvas();//调用绘制函数
       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({    //网络图片需要先下载到本地
                        url:'图片地址',
                        success(res) {
                            // 只要服务器有响应数据,就会把响应内容写入文件并进入 success 回调,业务需要自行判断是否下载到了想要的内容
                            if (res.statusCode === 200) {
                                const ctx = wx.createCanvasContext('springCanvas')
                                ctx.drawImage(res.tempFilePath, 0, 0, 328, 582);
                                ctx.draw()
                                wx.downloadFile({    //下载第二张网络图片
                                    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)  //设为true时,不会擦除之前绘制的内容
                                            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
                // 生产环境时 记得这里要加入获取相册授权的代码
                // 可以通过 wx.getSetting 先查询一下用户是否授权了 "scope.writePhotosAlbum" 这个 scope
                wx.getSetting({
                    success(res) {
                    if (!res.authSetting['scope.writePhotosAlbum']) {
                        wx.authorize({
                            scope: 'scope.writePhotosAlbum',
                            success() {
                            // 用户已经同意小程序相册功能,后续调用 wx.saveImageToPhotosAlbum 接口不会弹窗询问
                            that.startSaveImage()
                            }
                        })
                    } else {
                        that.startSaveImage()
                    }
                    }
                })
            },
    
            startSaveImage() {
                let that = this
                wx.saveImageToPhotosAlbum({
                    filePath: that.preurl,
                    success(res) {
                    }
                })
    
            },
    

    OK,到这里,海报已绘制完成并下载到相册(包括网络图片的下载和绘制,文字的绘制,矩形的绘制)。
    下一篇将会写关于绘制海报时文字换行问题,请大家多多关注~

    相关文章

      网友评论

          本文标题:小程序canvas绘图完整篇

          本文链接:https://www.haomeiwen.com/subject/esomjqtx.html