微信小程序图片选择区域裁剪实现方法

本文介绍了微信小程序图片选择区域屏裁剪实现方法分享给大家。具体如下:

效果

HTML代码

rush:xhtml;"> Box"> 开始裁剪 点击上传图片 点击确认 等屏裁剪 区域裁剪 Box_t"> 重新裁剪

CSS代码

rush:css;"> .imgCut_header{ padding: 30rpx; display: flex; justify-content: space-between; align-items: center; background: #000; color: #fff; font-size: 24rpx; } .allCavans{ margin: 20rpx auto; position: relative; } .canvassty{ position: absolute; } .cutImg_Box{ width: 100%;

border-bottom: 2rpx #f98700 solid;
padding-bottom: 20rpx;
}
.cutImg_Box .cutImg_Boxt{
width: 90%;
margin: 20rpx auto;
}
.cutImg
Box image{
width: 100%;
}
.cutImg_Box .cutImg_Box_b{
margin-top: 20rpx;
width: 80%;
height: 80rpx;
line-height: 80rpx;
background: #f98700;
color: #fff;
border-radius: 10rpx;
text-align: center;
margin:0rpx auto;
}
.selectCutMode{
background: #fff;
display: flex;
justify-content: space-between;
align-items: center;
}
.selectCutMode .selectCutMode_in{
width: 100%;
text-align: center;
background: #fff;
color: #f98700;
font-size: 24rpx;
padding: 20rpx;
}
.selectCutMode .selectCutMode_inact{
background: #f98700;
color: #fff;
padding: 20rpx;
}
.areaSelct
Box{
width: 100%;
display: flex;
align-items: center;
height: 50rpx;
justify-content: center;
margin-top: 20rpx;
}
.areaSelct_Box slider{
width: 80%;
}
.cutImg_Box .clickCutImg_txt{
width: 100%;
text-align: center;
height: 50rpx;
font-size: 24rpx;
line-height: 50rpx;
color: #999;
}

JS代码部分

初始加载带入上一个页面带过来的参数路径

rush:js;"> onLoad: function (options) { var that = this; const ctx = wx.createCanvasContext('cutImg'); ctx.setGlobalAlpha(0.4) var aa = 'https://pintuanqu.oss-cn-hangzhou.aliyuncs.com/Uploads/Picture/goodsShow/20171201/5a2125fc86566.png'
  //获取当前屏幕宽度 var phoneW = Number(util.NowPhoneWH()[0]*90)/100; var cutH = 150; wx.getimageInfo({ src: aa,success: function (res) { var w = phoneW; var h = (phoneW/Number(res.width))*Number(res.height) ctx.save() ctx.drawImage(aa,w,h) ctx.restore() ctx.setFillStyle('red') ctx.fillRect(0,phoneW,cutH) ctx.draw() that.setData({ canvasW:w,canvasH:h,img:aa,cutH:cutH }) } }) },

确定选择区域开始裁剪

rush:js;"> // 点击确认裁剪图片 okCutImg:function(){ var that = this; var canvasW = that.data.canvasW; var canvasH = that.data.canvasH; var NowCutW = that.data.cutType?canvasW:that.data.NowCutW; var NowCutH = that.data.cutType?that.data.cutH:that.data.NowCutH; var cutX = that.data.cutX; var cutY = that.data.cutY; const ctx = wx.createCanvasContext('cutImg'); ctx.setGlobalAlpha(1) ctx.drawImage(that.data.img,canvasW,canvasH) ctx.draw() wx.canvasToTempFilePath({ x: cutX,y: cutY,width: NowCutW,height: NowCutH,destWidth: NowCutW,destHeight: NowCutH,canvasId: 'cutImg',success: function(res) { var aa = res.tempFilePath that.setData({ cutimgurl:aa,prienFlag:false,alreay:false }) } }) },

红框根据手指移动方法

rush:js;"> // 点击红框开始移动 canvasMove:function(e){ var that = this; var canvasW = that.data.canvasW; var canvasH = that.data.canvasH; var NowCutW = that.data.cutType?canvasW:that.data.NowCutW; var NowCutH = that.data.cutType?that.data.cutH:that.data.NowCutH var touches = e.touches[0]; var x = touches.x; var y = touches.y-(Number(NowCutH)/2); that.data.cutType?x=0:x=x-(Number(NowCutW)/2); that.setData({ cutX:x,cutY:y }) const ctx = wx.createCanvasContext('cutImg'); ctx.setGlobalAlpha(0.4) ctx.drawImage(that.data.img,canvasH) ctx.setFillStyle('red') ctx.fillRect(x,y,NowCutW,NowCutH) ctx.draw() },

上方两个选择裁剪方式的按钮

等屏裁剪

rush:js;"> //等屏裁剪 etcType:function(){ var that = this; var propor = 100; var canvasW = that.data.canvasW; var canvasH = that.data.canvasH; var cutH = that.data.cutH; var NowCutW = (Number(canvasW)*propor)/100 var NowCutH = (Number(cutH)*propor)/100 const ctx = wx.createCanvasContext('cutImg'); ctx.setGlobalAlpha(0.4) ctx.drawImage(that.data.img,canvasH) ctx.setFillStyle('red') ctx.fillRect(0,NowCutH) ctx.draw() that.setData({ NowCutW:NowCutW,NowCutH:NowCutH,cutType:true }) },

局域裁剪

rush:js;"> areaType:function(){ var that = this; var propor = that.data.propor; var canvasW = that.data.canvasW; var canvasH = that.data.canvasH; var cutH = that.data.cutH; var NowCutW = (Number(canvasW)*propor)/100 var NowCutH = (Number(cutH)*propor)/100 const ctx = wx.createCanvasContext('cutImg'); ctx.setGlobalAlpha(0.4) ctx.drawImage(that.data.img,cutType:false }) },

局域裁剪上方的滑动选择红框根据宽度等比例缩放

rush:js;"> areaChange:function(e){ var that = this; var propor = e.detail.value; var canvasW = that.data.canvasW; var canvasH = that.data.canvasH; var cutH = that.data.cutH; var NowCutW = (Number(canvasW)*propor)/100 var NowCutH = (Number(cutH)*propor)/100 const ctx = wx.createCanvasContext('cutImg'); ctx.setGlobalAlpha(0.4) ctx.drawImage(that.data.img,canvasH) ctx.setFillStyle('red') ctx.fillRect(that.data.cutX||0,that.data.cutY||0,propor:propor }) },

重新裁剪回到初始选择图片页面

rush:js;"> // 重新裁剪 againBtn:function(){ var that = this; var data = that.data this.setData({ prienFlag:true,alreay:true }) const ctx = wx.createCanvasContext('cutImg'); ctx.setGlobalAlpha(0.4) ctx.drawImage(data.img,data.canvasW,data.canvasH) ctx.setFillStyle('red') ctx.fillRect(that.data.cutX||0,data.NowCutW||data.canvasW,data.NowCutH||data.cutH) ctx.draw() },

现在IOS还有个坑就是裁剪不了,官方正在修复不知道什么时候好

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

相关文章

开发微信小程序的用户授权登录功能
小程序开发页面如何实现跳转?
浅谈小程序开发中蓝牙连接错误分析及解决方法
什么是小程序?它有哪些功能?
如何配置小程序开发项目结构?(教程)
怎么把自己的店加入小程序