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

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 11:11:33
字體:
來源:轉載
供稿:網友

小程序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渲染是需要時間的。
這也算是一個簡單的練手吧,下次有什么復雜的截圖功能再分享出來吧。

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久69精品久久久久久国产越南| 国产在线视频91| 欧美性猛交xxxx乱大交| 欧美精品激情在线观看| 久久99热精品这里久久精品| 亚洲最大的av网站| 成人www视频在线观看| 亚洲一区二区三区在线免费观看| 亚洲日韩欧美视频一区| 亚洲女人天堂成人av在线| 日韩精品在线免费观看视频| 原创国产精品91| 久久这里只有精品视频首页| 欧美日韩免费观看中文| 正在播放欧美视频| 日韩欧美精品网址| 欧美巨乳美女视频| 色噜噜狠狠狠综合曰曰曰| 成人午夜一级二级三级| 国产成人精品最新| 欧美另类暴力丝袜| 日韩av免费在线观看| 91网站在线免费观看| 亚洲xxxx妇黄裸体| 26uuu另类亚洲欧美日本一| 国产精品成人国产乱一区| 国产在线播放不卡| 欧美精品一本久久男人的天堂| 国模私拍一区二区三区| 亚洲欧洲免费视频| 欧美体内谢she精2性欧美| 亚洲视频在线免费观看| 国产精品国产三级国产专播精品人| 精品国产乱码久久久久久婷婷| 自拍偷拍亚洲精品| 国产欧美日韩精品专区| 欧美在线www| 国产精品久久久久久久天堂| 欧美巨乳在线观看| 91视频8mav| 国产精品毛片a∨一区二区三区|国| 国产在线98福利播放视频| 国模极品一区二区三区| 国产九九精品视频| 精品国产乱码久久久久久婷婷| 国产精品扒开腿爽爽爽视频| 国产一区二区三区视频在线观看| 伊人久久大香线蕉av一区二区| 成人激情视频免费在线| 国产精品视频xxxx| 午夜精品免费视频| 欧美日韩一区二区免费视频| 国产第一区电影| 久久久国产精彩视频美女艺术照福利| 91精品在线国产| 国产午夜一区二区| 国产成人精品电影| 国产成人综合av| 欧美区在线播放| 97人人爽人人喊人人模波多| 色综合天天狠天天透天天伊人| 欧美日韩视频免费播放| 日韩免费精品视频| 国产成人精品av在线| 91在线高清免费观看| 欧美成人免费一级人片100| 欧美人与性动交| 国内精品久久久久影院 日本资源| 久久在精品线影院精品国产| 日韩精品亚洲精品| 97精品一区二区视频在线观看| 国产噜噜噜噜久久久久久久久| 国产精品久久久久久婷婷天堂| 欧美亚洲在线播放| 午夜精品久久久久久久男人的天堂| 久久久久久久久久久久av| 亚洲剧情一区二区| 亚洲国产精品一区二区三区| 超碰97人人做人人爱少妇| 欧美日韩国产中文字幕| 九九视频直播综合网| 在线精品播放av| 疯狂欧美牲乱大交777| 国产精品一区专区欧美日韩| 亚洲午夜国产成人av电影男同| 亚洲人成电影网站色www| 久久综合免费视频| 日韩精品小视频| 日本精品久久久| 欧美香蕉大胸在线视频观看| 国产精品久久久久久久一区探花| 日韩电影免费观看在线观看| 国产一区二区三区18| 久久久久久九九九| 欧美成人高清视频| 久久国产精品免费视频| 欧美性视频精品| 91黑丝高跟在线| 精品国产乱码久久久久久婷婷| 日韩国产在线播放| 91精品国产自产在线观看永久| 日韩av电影手机在线观看| 欧美性猛交丰臀xxxxx网站| 亚洲国产91精品在线观看| 97免费在线视频| 国产亚洲美女精品久久久| 亚洲电影免费观看高清完整版在线观看| 色综合色综合久久综合频道88| 中文字幕v亚洲ⅴv天堂| 亚洲激情在线观看视频免费| 欧美黄色小视频| 最近2019年日本中文免费字幕| 国产成人精品优优av| 日韩精品中文在线观看| 国产成人avxxxxx在线看| 一本一本久久a久久精品牛牛影视| 伊人伊成久久人综合网小说| 亚洲视频在线视频| 亚洲精品美女免费| 亚洲精品成人av| 久久成人18免费网站| 久久亚洲欧美日韩精品专区| 国产精欧美一区二区三区| 欧美贵妇videos办公室| 日韩电影在线观看中文字幕| 91精品在线观看视频| 亚洲大胆美女视频| 欧美日韩精品中文字幕| 一本色道久久88亚洲综合88| 国产在线日韩在线| 亚洲一区精品电影| 中文字幕av一区二区三区谷原希美| www日韩欧美| 亚洲夜晚福利在线观看| 欧美精品少妇videofree| 亚洲影院色在线观看免费| 欧美电影电视剧在线观看| 亚洲成人精品在线| www.国产精品一二区| 久久久国产一区二区| 97久久伊人激情网| 久久久最新网址| 亚洲国产女人aaa毛片在线| 国产精品美女主播在线观看纯欲| 国产精品99久久久久久久久久久久| 性色av香蕉一区二区| 欧美激情2020午夜免费观看| 日韩欧美国产骚| 日本老师69xxx| 亚洲影视九九影院在线观看| 综合国产在线观看| 最新69国产成人精品视频免费| 欧美一级片一区| 国产欧美日韩专区发布| 亚洲美女又黄又爽在线观看| 97免费视频在线| 欧美激情xxxxx| 日韩专区在线播放| 97成人精品视频在线观看| www.色综合| 欧美日韩视频在线| 国产精品一区二区久久国产| 国产婷婷成人久久av免费高清| 久久久久久九九九|