我的编程空间,编程开发者的网络收藏夹
学习永远不晚

微信小程序裁剪头像插件如何使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

微信小程序裁剪头像插件如何使用

这篇文章主要介绍“微信小程序裁剪头像插件如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序裁剪头像插件如何使用”文章能帮助大家解决问题。

用户上传头像,需要裁剪成正方形,结合在网上找到裁剪图片方法,封装为微信小程序组件。调用很方便。

参数介绍:

  • image_url:需要裁剪的图片链接

  • showCutImage:是否显示裁剪图片组件

wxml调用:

<cutImage imageUrl="{{image_url}}" bind:returnImageUrl="returnImageUrl"  wx:if="{{showCutImage}}" ></cutImage>

js调用:

returnImageUrl: function (e) {    //e.detail.imageUrl,e.detail.showCutImage  }

wxml代码:

<view class='fixed-upimg'>  <view class="wx-content-info" >    <view class="iamge-box" >      <image  class="lazy" data-src="{{imageUrl}}"></image>      <view class="wx-corpper-crop-box" bindtouchstart="contentStartMove" bindtouchmove="contentMoveing" >        <view class="wx-cropper-view-box">          <view class="wx-cropper-dashed-h"></view>          <view class="wx-cropper-dashed-v"></view>          <view class="wx-cropper-line-t" data-drag="top" catchtouchstart="dragStart" catchtouchmove="dragMove"></view>          <view class="wx-cropper-line-r" data-drag="right" catchtouchstart="dragStart" catchtouchmove="dragMove"></view>          <view class="wx-cropper-line-b" data-drag="bottom" catchtouchstart="dragStart" catchtouchmove="dragMove"></view>          <view class="wx-cropper-line-l" data-drag="left" catchtouchstart="dragStart" catchtouchmove="dragMove"></view>          <view class="wx-cropper-point point-t" data-drag="top" catchtouchstart="dragStart" catchtouchmove="dragMove"></view>          <view class="wx-cropper-point point-tr" data-drag="topTight"></view>          <view class="wx-cropper-point point-r" data-drag="right" catchtouchstart="dragStart" catchtouchmove="dragMove"></view>          <view class="wx-cropper-point point-rb" data-drag="rightBottom" catchtouchstart="dragStart" catchtouchmove="dragMove"></view>          <view class="wx-cropper-point point-b" data-drag="bottom" catchtouchstart="dragStart" catchtouchmove="dragMove"></view>          <view class="wx-cropper-point point-bl" data-drag="bottomLeft"></view>          <view class="wx-cropper-point point-l" data-drag="left" catchtouchstart="dragStart" catchtouchmove="dragMove"></view>          <view class="wx-cropper-point point-lt" data-drag="leftTop"></view>        </view>      </view>    </view>    <canvas canvas-id="myCanvas" ></canvas>    <view  class='button-tjtp' bindtap="getImageInfo" > 提交图片 </view>  </view></view>

wxss代码:

.button-tjtp{  width: 300rpx;  height: 45px;  border-radius: 50rpx;  color: #151D37;  background-color: #fff;  margin: 20px 225rpx;  font-size: 30rpx;  display: flex;  justify-content: center;  align-items: center;}.fixed-upimg{    position: fixed;  top: 0;  left: 0;  right: 0;  bottom: 0;  background-color: #000;  z-index: 9999;}.wx-content-info{  position: fixed;  top: 0rpx;  left: 0;  right: 0;  bottom: 0; }.iamge-box{  display: flex;  justify-content: center;  align-items: center;}.wx-corpper-crop-box{    position: absolute;    width: 500rpx;    height: 500rpx;    background: rgba(255,255,255,0.3);    z-index: 2;}.wx-cropper-view-box {    position: relative;    display: block;    width: 100%;    height: 100%;    overflow: visible;    outline: 1px solid #69f;    outline-color: rgba(102, 153, 255, .75)} .wx-cropper-dashed-h{    position: absolute;    top: 33.33333333%;    left: 0;    width: 100%;    height: 33.33333333%;    border-top: 1px dashed rgba(255,255,255,0.5);    border-bottom: 1px dashed rgba(255,255,255,0.5);} .wx-cropper-dashed-v{    position: absolute;    left: 33.33333333%;    top: 0;    width: 33.33333333%;    height: 100%;    border-left: 1px dashed rgba(255,255,255,0.5);    border-right: 1px dashed rgba(255,255,255,0.5);} .wx-cropper-line-t{    position: absolute;    display: block;    width: 100%;    background-color: #69f;    top: 0;    left: 0;    height: 1px;    opacity: 0.1;    cursor: n-resize;} .wx-cropper-line-t::before{  content: '';  position: absolute;  top: 50%;  right: 0rpx;  width: 100%;  -webkit-transform: translate3d(0,-50%,0);  transform: translate3d(0,-50%,0);  bottom: 0;  height: 41rpx;  background: transparent;  z-index: 11;} .wx-cropper-line-r{    position: absolute;    display: block;    background-color: #69f;    top: 0;    right: 0px;    width: 1px;    opacity: 0.1;    height: 100%;    cursor: e-resize;}.wx-cropper-line-r::before{  content: '';  position: absolute;  top: 0;  left: 50%;  width: 41rpx;  -webkit-transform: translate3d(-50%,0,0);  transform: translate3d(-50%,0,0);  bottom: 0;  height: 100%;  background: transparent;  z-index: 11;} .wx-cropper-line-b{    position: absolute;    display: block;    width: 100%;    background-color: #69f;    bottom: 0;    left: 0;    height: 1px;    opacity: 0.1;    cursor: s-resize;} .wx-cropper-line-b::before{  content: '';  position: absolute;  top: 50%;  right: 0rpx;  width: 100%;  -webkit-transform: translate3d(0,-50%,0);  transform: translate3d(0,-50%,0);  bottom: 0;  height: 41rpx;  background: transparent;  z-index: 11;} .wx-cropper-line-l{    position: absolute;    display: block;    background-color: #69f;    top: 0;    left: 0;    width: 1px;    opacity: 0.1;    height: 100%;    cursor: w-resize;}.wx-cropper-line-l::before{  content: '';  position: absolute;  top: 0;  left: 50%;  width: 41rpx;  -webkit-transform: translate3d(-50%,0,0);  transform: translate3d(-50%,0,0);  bottom: 0;  height: 100%;  background: transparent;  z-index: 11;} .wx-cropper-point{    width: 5px;    height: 5px;    background-color: #69f;    opacity: .75;    position: absolute;    z-index: 3;} .point-t{    top: -3px;    left: 50%;    margin-left: -3px;    cursor: n-resize;} .point-tr{    top: -3px;    left: 100%;    margin-left: -3px;    cursor: n-resize;} .point-r{    top: 50%;    left:100%;    margin-left: -3px;    margin-top: -3px;    cursor: n-resize;} .point-rb{    left: 100%;    top: 100%;    -webkit-transform: translate3d(-50%,-50%,0);    transform: translate3d(-50%,-50%,0);    cursor: n-resize;    width: 24rpx;    height: 24rpx;    background-color: #69f;    position: absolute;    z-index: 1112;    opacity: 1;} .point-b{    left:50%;    top: 100%;    margin-left: -3px;    margin-top: -3px;    cursor: n-resize;} .point-bl{    left:0%;    top: 100%;    margin-left: -3px;    margin-top: -3px;    cursor: n-resize;} .point-l{    left:0%;    top: 50%;    margin-left: -3px;    margin-top: -3px;    cursor: n-resize;} .point-lt{    left:0%;    top: 0%;    margin-left: -3px;    margin-top: -3px;    cursor: n-resize;} .wx-cropper-viewer{  position: relative;  width: 100%;  height: 100%;  overflow: hidden;} .wx-cropper-viewer image{  position: absolute;  z-index: 2;}

js代码:

var pageX = 0// 拖动时候的 pageYvar pageY = 0// 移动时 手势位移与 实际元素位移的比var dragScaleP = 2var pixelRatio = wx.getSystemInfoSync().pixelRatioComponent({    properties: {    imageUrl:{      type:String,      value:''    }  },    data: {    imageBoxHeight:0,    windowWidth: 0,    imageUrl:''  },  lifetimes: {    // 生命周期函数,可以为函数,或一个在methods段中定义的方法名    attached: function () {      this.getSysInfo();      this.getImageDetail();    },  },  created: function () {    this.getSysInfo();  },    methods: {    // 获取设备信息    getSysInfo () {       wx.getSystemInfo({        success: (res) => {          console.log(res)          this.setData({            imageBoxHeight: res.windowHeight - 85,            windowWidth: res.windowWidth          })        },      })    },    getImageDetail(){      wx.getImageInfo({        class="lazy" data-src: this.data.imageUrl,        success: (res) => {          this.setData({            imageW: res.width / 2,            imageH: res.height / 2          })          if (res.width >= res.height) {            var h = (res.height * this.data.windowWidth) / res.width;            this.setData({              imageWidth: this.data.windowWidth,              imageHeight: h,              cutW: h,              cutH: h,              cutL: (this.data.windowWidth - h) / 2,              cutT: (this.data.imageBoxHeight - h) / 2            })          } else {            var w = (this.data.imageBoxHeight * res.width) / res.height;            this.setData({              imageWidth: w,              imageHeight: this.data.imageBoxHeight,              cutW: w,              cutH: w,              cutL: (this.data.windowWidth - w) / 2,              cutT: (this.data.imageBoxHeight - w) / 2            })          }        }      })    },    // 拖动时候触发的touchMove事件    contentMoveing(e) {      var _this = this      // _this.data.cutL + (e.touches[0].pageX - pageX)      // console.log(e.touches[0].pageX)      // console.log(e.touches[0].pageX - pageX)      var dragLengthX = (pageX - e.touches[0].pageX)      var dragLengthY = (pageY - e.touches[0].pageY)      var minX = Math.max(_this.data.cutL - (dragLengthX), 0)      var minY = Math.max(_this.data.cutT - (dragLengthY), 0)      var maxX = _this.data.imageWidth - _this.data.cutW      var maxY = _this.data.imageHeight - _this.data.cutH      if (_this.data.imageWidth == _this.data.cutW) {        this.setData({          cutT: Math.min(maxY, minY),        })      } else if (_this.data.imageHeight == _this.data.cutH) {        this.setData({          cutL: Math.min(maxX, minX)        })      }      console.log(`${maxX} ----- ${minX}`)      pageX = e.touches[0].pageX      pageY = e.touches[0].pageY    },    // 拖动时候触发的touchStart事件    contentStartMove(e) {      pageX = e.touches[0].pageX      pageY = e.touches[0].pageY    },    // 裁剪图片    getImageInfo() {      var _this = this      console.log('shengcheng:' + _this.data.imageUrl)      wx.showLoading({        title: '图片生成中...',      })      // wx.downloadFile({      //   url:_this.data.imageclass="lazy" data-src, //仅为示例,并非真实的资源           //   success: function (res) {      // 将图片写入画布                   const ctx = wx.createCanvasContext('myCanvas', _this)      // ctx.drawImage(res.tempFilePath)      ctx.drawImage(_this.data.imageUrl, 0, 0, _this.data.imageW, _this.data.imageH)      ctx.draw(true, () => {        // 获取画布要裁剪的位置和宽度   均为百分比 * 画布中图片的宽度    保证了在微信小程序中裁剪的图片模糊  位置不对的问题        var canvasW = (_this.data.cutW / _this.data.imageWidth) * (_this.data.imageW)        var canvasH = (_this.data.cutH / _this.data.imageHeight) * (_this.data.imageH)        var canvasL, canvasT;        if (_this.data.imageHeight == _this.data.imageBoxHeight) {          canvasL = (0 / _this.data.imageWidth) * (_this.data.imageW)        } else {          canvasL = (_this.data.cutL / _this.data.imageWidth) * (_this.data.imageW)        }        if (_this.data.imageWidth == _this.data.windowWidth) {          canvasT = (0 / _this.data.imageHeight) * (_this.data.imageH)        } else {          canvasT = (_this.data.cutT / _this.data.imageHeight) * (_this.data.imageH)        }        console.log(`canvasW:${canvasW} --- canvasH: ${canvasH} --- canvasL: ${canvasL} --- canvasT: ${canvasT} -------- _this.data.imageW: ${_this.data.imageW}  ------- _this.data.imageH: ${_this.data.imageH} ---- pixelRatio ${pixelRatio}`)        wx.canvasToTempFilePath({          x: canvasL,          y: canvasT,          width: canvasW,          height: canvasH,          destWidth: canvasW,          destHeight: canvasH,          canvasId: 'myCanvas',          success: function (res) {            // 成功获得地址的地方            var tempFilePath = res.tempFilePath;            wx.hideLoading()            _this.returnImageUrl(tempFilePath)                      },          fail: function (res) {            console.log(res)            wx.hideLoading()            wx.showModal({              content: '抱歉,图片上传失败!图片过大可能导致图片上传失败!',              showCancel: false,              confirmText: '我知道了',              confirmColor: "#151D37",              success: function (res) {                if (res.confirm) {                  _this.setData({                    imageFixed: false,                    tempFilePath: res.tempFilePath                  })                }              }            })          }        }, _this)      })    },    returnImageUrl: function (url) {      this.triggerEvent('returnImageUrl', {        imageUrl: url,        showCutImage:false      })    }  }})

关于“微信小程序裁剪头像插件如何使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网行业资讯频道,小编每天都会为大家更新不同的知识点。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

微信小程序裁剪头像插件如何使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

微信小程序裁剪头像插件如何使用

这篇文章主要介绍“微信小程序裁剪头像插件如何使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序裁剪头像插件如何使用”文章能帮助大家解决问题。用户上传头像,需要裁剪成正方形,结合在网上找到裁
2023-06-30

微信小程序如何实现照片裁剪

这篇文章主要讲解了“微信小程序如何实现照片裁剪”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序如何实现照片裁剪”吧!组件代码1.cut_photo.json{ "component
2023-06-30

微信小程序如何实现裁剪图片大小

这篇文章主要介绍“微信小程序如何实现裁剪图片大小”,在日常操作中,相信很多人在微信小程序如何实现裁剪图片大小问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微信小程序如何实现裁剪图片大小”的疑惑有所帮助!接下来
2023-06-30

微信小程序如何使用open-data更改头像显示样式

这篇文章主要介绍微信小程序如何使用open-data更改头像显示样式,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!代码如下:
2023-06-26

如何使用PHP实现微信小程序的头像制作功能?

如何使用PHP实现微信小程序的头像制作功能?微信小程序作为一种新型的移动应用形式,受到了越来越多开发者的关注和喜爱。其中,头像制作功能是小程序中常见的一种功能,可以让用户通过选择不同的头像框或者添加自己喜欢的元素来制作个性化的头像。实现头像
2023-10-26

微信小程序的视频插件怎么使用

本篇内容主要讲解“微信小程序的视频插件怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信小程序的视频插件怎么使用”吧!一、在小程序中引入插件。进入微信公众平台,在设置中找到第三方服务,在
2023-06-26

微信小程序如何实现虎年春节头像制作

这篇文章主要介绍微信小程序如何实现虎年春节头像制作,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!先上最终效果图:说下实现流程第一步:先获取到当前微信的头像图片,主要代码如下,注意默认获取到的头像图片不是高清的,需要先
2023-06-29

微信小程序弹窗组件如何使用

本篇内容主要讲解“微信小程序弹窗组件如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信小程序弹窗组件如何使用”吧!效果图需求背景项目需求是需要在页面上通过点击按钮, 然后弹出弹窗蒙层;
2023-07-02

微信小程序TodoList如何使用

这篇文章主要介绍“微信小程序TodoList如何使用”,在日常操作中,相信很多人在微信小程序TodoList如何使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”微信小程序TodoList如何使用”的疑惑有所
2023-06-26

微信小程序中如何使用vant组件库

本篇内容介绍了“微信小程序中如何使用vant组件库”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Vant Weapp的安装与使用1、安装 n
2023-07-05

video组件如何在微信小程序中使用

video组件如何在微信小程序中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1.app.json{ "pages":[ "pages/video/video"
2023-06-14

微信小程序下拉框组件如何使用

今天小编给大家分享一下微信小程序下拉框组件如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。小程序有时需要使用下拉框选项
2023-07-02

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录