亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 課堂 > 小程序 > 正文

微信小程序簡單的canvas裁剪圖片功能詳解

2020-03-21 15:52:16
字體:
來源:轉載
供稿:網友

小程序miniso的一個發布內容截圖功能,話不多,先上代碼

wxml文件:

<view class="cut-1-1 t-c {{cutSelect == 1? 'cut-select':''}}" data-cut="1" bindtap="selectCutType">1:1</view><view class="cut-3-4 t-c {{cutSelect == 2? 'cut-select':''}}" data-cut="2" bindtap="selectCutType">3:4</view>
<block wx:for="{{imgList}}" wx:key="{{index}}" >   <swiper-item>    <scroll-view scroll-top="{{topNum}}" scroll-y class="imgFile {{cutSelect == 1?'view-1-1':'view-3-4'}}" bindscroll="endTou">     <image src='{{item}}' mode="widthFix"></image>    </scroll-view >   </swiper-item></block>
<canvas wx:for="{{imgList}}" wx:for-index="i" canvas-id="myCanvas_{{i}}" style="width: {{width[i]?width[i]*2:750}}rpx; height: {{height[i]?height[i]*2:750}}rpx;"></canvas>

這里是對多張圖片進行統一處理,用戶選了哪種截圖比例,所有圖片用統一規格裁剪。

因為簡單,不提供縮放和左右移動,所以只能裁剪豎長圖,不支持橫長圖裁剪。

topNum用于scroll-view的reset處理

wxss文件

.view-1-1 { width: 750rpx; height: 750rpx; overflow: hidden;}.view-3-4 { width: 750rpx; height: 750rpx; padding: 0 94rpx; box-sizing: border-box; overflow: hidden;}canvas { position: absolute; /* display: none; */ left: -999rpx; z-index: 0;}

裁剪比例的樣式,1:1裁剪使用750rpx,3:4使用padding進行視覺上的拉長
接下來就是重要的代碼部分了

js文件

cutPic() {  const _this = this  if (this.data.cutting) {   return  }  let promiseList = [], ctx = []  _this.data.imgList.forEach((v, i) => {   promiseList.push(_this.draw(ctx, v, i))  })  wx.showLoading({   title: '截取中...',   icon: 'none'  })  this.setData({   cutting: true  })  Promise.all(promiseList).then((arr) => {   wx.setStorageSync("interimImagesList", _this.data.imgFileList)   _this.uploadPic()  }, err => {  }) },

使用微信自帶api,wx.chooseImage將圖片保存在imgList數組里,因為裁剪圖片用canvas處理會有一定的延遲,所以使用promise進行異步處理

//獲取豎向滑動坐標 endTou(e) {  const _this = this  let y = 'y[' + (_this.data.currentIndex - 1) + '].top'  _this.setData({   [y]: e.detail.scrollTop  }) },

定義的y數組用于記錄每張圖片截取的位置。

//繪制 draw(ctx, v, i) {  const _this = this  let width, height  return new Promise((resolve, reject) => {   ctx[i] = wx.createCanvasContext(`myCanvas_${i}`)   wx.getImageInfo({    src: v,    success: function (res) {     width = 'width[' + i + ']'     height = 'height[' + i + ']'     var str = res.height / res.width;//圖片的寬高比     _this.setData({      [width]: 375,      [height]: 375 * str     }, () => {      ctx[i].drawImage(v, 0, 0, _this.data.width[i], _this.data.height[i])      ctx[i].draw(false, () => {       setTimeout(() => {        wx.canvasToTempFilePath({//調用方法,開始截取         x: 0,         y: _this.data.y[i] ? _this.data.cutSelect == 1 ? _this.data.y[i].top : _this.data.y[i].top / 0.75 : 0,         width: 375,         height: _this.data.cutSelect == 1 ? 375 : 500,         destWidth: 375,         destHeight: _this.data.cutSelect == 1 ? 375 : 500,         canvasId: 'myCanvas_' + i,         success: function (res) {          resolve(res.tempFilePath)          console.info('canvas', res.tempFilePath)          let img = 'imgFileList[' + i + ']'          _this.setData({           [img]: res.tempFilePath          })         },         fail: function (err) {          reject(err)          console.info(err)         }        })       }, 1000) // 渲染時間      })     })    }   })  }) },

渲染圖片最重要的一步是獲得寬高比,所以在canvas繪制之前使用getImageInfo獲取到圖片信息,var str=res.height/res.width獲得高寬比例。

canvas繪制圖片是需要時間,所以setTime了個1秒,不然截出來的圖是失敗的。這里也可以使用遞歸的方式來繪制canvas,代碼就不給出了,可以自己搜一下。

總結

一個簡單的canvas截圖就制作完成了。值得注意的是canvas渲染是需要時間的。
這也算是一個簡單的練手吧,下次有什么復雜的截圖功能再分享出來吧。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
高清欧美性猛交| 国产精品久久久久高潮| 欧美成人四级hd版| 成人字幕网zmw| 精品国产自在精品国产浪潮| 欧美诱惑福利视频| 精品国产精品三级精品av网址| 国产精品视频精品视频| 96sao精品视频在线观看| 精品女厕一区二区三区| 丝袜美腿亚洲一区二区| 日韩精品免费在线视频观看| 亚洲韩国日本中文字幕| 一区二区三区国产视频| 色婷婷av一区二区三区在线观看| 久久精品国产69国产精品亚洲| 国产美女久久精品香蕉69| 欧美一区第一页| 国产亚洲欧美另类中文| 91久久嫩草影院一区二区| 日韩av网站导航| 日韩免费在线观看视频| 欧美专区国产专区| 日韩在线视频观看正片免费网站| 欧美大人香蕉在线| 97久久精品国产| 欧美性视频精品| 国产日韩欧美日韩| 亚洲第一页中文字幕| 久久这里有精品| 亚洲久久久久久久久久| 亚洲精品999| xvideos国产精品| 亚洲第一在线视频| 91黑丝高跟在线| 中文字幕日韩视频| 亚洲精品www| 日韩精品视频免费| 亚洲第一av网站| 欧美日韩国产123| 亚洲sss综合天堂久久| 精品国产1区2区| 另类天堂视频在线观看| 国产综合在线看| 91精品国产高清自在线看超| 久久不射热爱视频精品| 国产免费亚洲高清| 欧美视频专区一二在线观看| 中文字幕少妇一区二区三区| 久久久国产精品一区| 激情成人在线视频| 国产精品小说在线| 青青草一区二区| 亚洲天堂av在线播放| 亚洲精品videossex少妇| 2018中文字幕一区二区三区| 亚洲精品之草原avav久久| 97色在线视频观看| 欧美亚洲成人网| 日韩欧美国产黄色| 欧美孕妇与黑人孕交| 国产精品高清免费在线观看| 久久久久久中文| 一区二区三区国产在线观看| 中文字幕av一区二区| 亚洲韩国日本中文字幕| 中文.日本.精品| 久久中文久久字幕| 久久久精品国产一区二区| 日韩中文字幕在线看| 色综合亚洲精品激情狠狠| 亚洲高清一区二| 国产欧美精品一区二区三区-老狼| 成人黄色大片在线免费观看| 欧美寡妇偷汉性猛交| 色综合久久88色综合天天看泰| 亚洲精品一区二区久| 亚洲自拍偷拍第一页| 国产精品手机播放| 亚洲电影中文字幕| 久久婷婷国产麻豆91天堂| 亚洲一区中文字幕在线观看| 欧美午夜精品久久久久久久| 亚洲成人av中文字幕| 北条麻妃一区二区三区中文字幕| 国产精品久久久久999| 亚洲区中文字幕| 欧美精品videossex性护士| 91av免费观看91av精品在线| 国产视频亚洲视频| 亚洲精品在线不卡| 国产精品久久久久久久久久三级| 亚洲国产另类 国产精品国产免费| 久久韩国免费视频| 日韩电视剧在线观看免费网站| 国产精品视频久久久久| 成人性生交大片免费看视频直播| 欧美极度另类性三渗透| 亚洲国产精品久久精品怡红院| 久久亚洲精品网站| 一区二区三区亚洲| 欧美成人一区二区三区电影| 国产精品丝袜高跟| 日韩综合中文字幕| 亚洲免费高清视频| 成人精品福利视频| 亚洲 日韩 国产第一| 日韩av手机在线看| 欧美怡春院一区二区三区| 亚洲高清免费观看高清完整版| 欧美日韩精品二区| 另类专区欧美制服同性| 国产精品高潮粉嫩av| 欧美日韩在线视频一区二区| 日韩中文字幕免费视频| 日韩欧美成人免费视频| 亚洲欧美日韩高清| 成人亚洲综合色就1024| 国产精品爽黄69天堂a| 成人久久久久久久| 伊人亚洲福利一区二区三区| 欧美老女人性视频| 国产亚洲日本欧美韩国| 欧美午夜美女看片| 国产成人综合精品在线| 国产视频精品在线| 亚洲最大的成人网| 欧美精品久久久久久久| 久久国产精品视频| 久久精品视频网站| 欧美激情精品久久久久久大尺度| 91国在线精品国内播放| 国产精品一区二区性色av| 亚洲人成电影在线播放| 26uuu国产精品视频| 精品亚洲精品福利线在观看| 欧美亚洲第一页| 成人女保姆的销魂服务| 精品少妇一区二区30p| 一区二区国产精品视频| 亚洲一区二区三区香蕉| 国产免费一区视频观看免费| 亚洲精品国产精品乱码不99按摩| 久久久久国产视频| 国产精品视频导航| 色偷偷偷亚洲综合网另类| 国产欧美亚洲精品| 精品毛片三在线观看| 久久久久国产精品免费| 精品亚洲夜色av98在线观看| 欧美电影在线观看| 4438全国亚洲精品在线观看视频| 午夜精品久久久久久久99黑人| 91影视免费在线观看| 九九热这里只有在线精品视| 96sao精品视频在线观看| 日韩在线免费视频观看| 久久久久久美女| 欧美老女人www| 久久福利视频网| 成人黄色短视频在线观看| 国产成人在线播放| 麻豆国产va免费精品高清在线| 欧美整片在线观看|