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

本文实例为大家分享了微信小程序实现裁剪图片大小的具体代码,供大家参考,具体内容如下

效果图

.wxml

<button bindtap="uploadtap">上传图片</button>
<image style="width: 100%;" mode="widthFix" src="{{canfile_image}}"></image>
<canvas canvas-id="myCanvas" id="myCanvas" style="width:100%;height:70vh;"></canvas>
<view class="canvas_model" wx:if="{{canvas_arr.show}}" catchtouchmove="setTouchMove">
  <view class="canvas_view" style="width: {{canvas_arr.width}}px;height: {{canvas_arr.height}}px;"
  bindtouchstart="handletouchstart" bindtouchmove="handletouchmove">
    <image style="width:100%;height:100%;" src="{{canvas_arr.src}}"></image>
    <view style="{{color_status?'background: rgba(0, 0, 0, 0.6);':''}}">
      <view class="canvas_horn" style="height:{{cutting.height}}px;top:{{canvas_y}}px;">
        <view></view>
        <view></view>
        <view></view>
        <view></view>
        <view></view>
        <view></view>
        <image style="width: {{canvas_arr.width}}px;height: {{canvas_arr.height}}px;top:-{{canvas_y}}px;" src="{{canvas_arr.src}}"></image>
      </view>
    </view>
  </view>
  <view class="canvas_bar" wx:if="{{cutting.show}}">
    <view bindtap="color_tap">×</view>
    <view class="bar_tab {{color_status?'tab_cation':''}}" bindtap="color_tap" data-type="1">
      <view>浅色</view>
      <view>深色</view>
      <view></view>
    </view>
    <view bindtap="ationimg">√</view>
  </view>
</view>

.wxss

 .canvas_model{width: 100%;height: 100vh;position: fixed;left: 0;top: 0;background: rgba(0, 0, 0, 0.6);z-index: 10;
display:flex;justify-content: center;padding-top: 10vh;animation:model 0.3s;}
@keyframes model{
  from { opacity: 0;transform: scale(0.5); }
  to { opacity:1;transform: scale(1); }
}
.canvas_view{float: left;position: relative;}
.canvas_view>view{width: 100%;height: 100%;position: absolute;left: 0;top: 0;background: rgba(255, 255, 255, 0.4);transition: all 0.3s;}
.canvas_horn{position: absolute;left: 0;width: 100%;overflow: hidden;}
.canvas_horn>view{width: 40rpx;height: 40rpx;position: absolute;z-index: 1;}
.canvas_horn>image{position: absolute;left: 0;top: 0;}
.canvas_horn>view:nth-child(1){border-left: 2px solid #fff;border-top: 2px solid #fff;left: 0;top: 0;}
.canvas_horn>view:nth-child(2){border-right: 2px solid #fff;border-top: 2px solid #fff;right: 0;top: 0;}
.canvas_horn>view:nth-child(3){border-left: 2px solid #fff;border-bottom:2px solid #fff;left: 0;bottom: 0;}
.canvas_horn>view:nth-child(4){border-right: 2px solid #fff;border-bottom: 2px solid #fff;right: 0;bottom: 0;}
.canvas_horn>view:nth-child(5){width: 60rpx;height: 2px;background: #fff;top: 0;left: 0;right: 0;margin: 0 auto;}
.canvas_horn>view:nth-child(6){width: 60rpx;height: 2px;background: #fff;bottom: 0;left: 0;right: 0;margin: 0 auto;}
.canvas_bar{width: 100%;height: 14vh;display: flex;align-items: center;justify-content: space-between;background: #fff;
position: absolute;left: 0;bottom: 0;animation:bartion 0.5s;}
@keyframes bartion{
  from { bottom: -14vh; }
  to { bottom: 0; }
}
.canvas_bar>view:nth-child(1),.canvas_bar>view:nth-child(3){width: 160rpx;height: 100%;display: flex;align-items: center;
justify-content: center;font-size: 44rpx;font-weight: 700;}
.bar_tab{width: 300rpx;display: flex;height: 60rpx;border-radius: 10rpx;border: 1px solid #f4f4f4;line-height: 60rpx;
position: relative;font-size: 24rpx;color: #333;}
.bar_tab>view{width: 50%;height: 100%;text-align: center;position: relative;z-index: 1;transition: all 0.3s;}
.bar_tab>view:nth-child(1){color: #fff;}
.bar_tab>view:nth-child(3){position: absolute;left: 0;top: 0;background: #0081ff;border-radius: 10rpx;z-index: 0;}
.tab_cation>view:nth-child(1){color: #000;}
.tab_cation>view:nth-child(2){color: #fff;}
.tab_cation>view:nth-child(3){left: 50%;}
#myCanvas{position: absolute;left: 0;top: -71vh;z-index: -1;opacity: 0;}

.js

Page({
  data: {
    canvas_arr:{
      src:'',
      width:parseInt(wx.getSystemInfoSync().windowWidth * 0.9),
      height:parseInt(wx.getSystemInfoSync().windowHeight * 0.7),
      show:false
    },
    cutting:{
      height:0,
      max_y:0,
      show:false
    },
    canvas_y:0,
    color_status:false,
    canfile_image:'',
  },
  color_tap(e){
    var type = e?e.currentTarget.dataset.type:0
    if(type == 1){
      this.setData({
        color_status:!this.data.color_status
      })
    }else{
      this.data.canvas_arr.show = false
      this.data.canvas_arr.height = parseInt(wx.getSystemInfoSync().windowHeight * 0.7)
      this.data.cutting.show = false
      this.data.cutting.src = ''
      this.setData({
        canvas_arr:this.data.canvas_arr,
        cutting:this.data.cutting,
        canvas_y:0,
      })
    }
  },
  setTouchMove(e){return;},
  uploadtap(e){
    var that = this
    wx.chooseImage({
      count:1,
      success (res) {
        const tempFilePaths = res.tempFilePaths[0]
        that.data.canvas_arr.src = tempFilePaths
        wx.getImageInfo({
          src: tempFilePaths,
          success (res) {
            that.data.canvas_arr.show = true
            that.data.cutting.show = true
            that.data.cutting.height = that.data.canvas_arr.width / 2
            var height = parseInt(res.height / (res.width / that.data.canvas_arr.width))
            that.data.canvas_arr.height = height > that.data.canvas_arr.height ? that.data.canvas_arr.height : height
            that.data.cutting.max_y = that.data.canvas_arr.height - that.data.cutting.height
            that.setData({
              canvas_arr:that.data.canvas_arr
            })
            setTimeout(function () {
              that.setData({
                cutting:that.data.cutting
              })
            },500)
          }
        })
      }
    })
  },
  handletouchstart: function (e) {
    this.data.startY = e.touches[0].clientY
  },
  handletouchmove (e) {
    let currentY = e.touches[0].clientY - this.data.startY
    if(currentY > 0){
      this.setData({
        canvas_y:currentY > this.data.cutting.max_y?this.data.cutting.max_y:currentY,
      })
    }else{
      this.setData({
        canvas_y:0
      })
    }
  },
  ationimg(e){
    var that = this
    var canvas_img = wx.createCanvasContext('myCanvas')
    canvas_img.width = that.data.canvas_arr.width
    canvas_img.height = that.data.canvas_arr.height
    canvas_img.drawImage(that.data.canvas_arr.src,0,0,canvas_img.width,canvas_img.height)
    canvas_img.draw(true,(()=>{
      wx.canvasToTempFilePath({
        x: 0,
        y: that.data.canvas_y,
        width:that.data.canvas_arr.width,
        height:that.data.cutting.height,
        canvasId: 'myCanvas',
        success: function (res) {
          that.setData({
            canfile_image:res.tempFilePath
          })
          that.color_tap()
          wx.showToast({
            title: '裁剪成功~',
            icon: 'none',
            duration: 3000
          })
        }
      });
    }))
  },
})

功能主要针对轮播图片尺寸,不合适可自行修改比例

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

(0)

相关推荐

  • 微信小程序简单的canvas裁剪图片功能详解

    小程序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':'

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

    本文介绍了微信小程序图片选择区域屏裁剪实现方法,分享给大家.具体如下: 效果图 HTML代码 <view class="index_all_box"> <view class="imgCut_header"> <view class="imgCut_header_l" bindtap='okCutImg'>开始裁剪</view> <view class="imgCut_header_

  • 微信小程序之裁剪图片成圆形的实现代码

    前言 最近在开发小程序,产品经理提了一个需求,要求微信小程序换头像,用户剪裁图片必须是圆形,也在github上看了一些例子,一般剪裁图片用的都是方形,所以自己打算写一个小组件,可以把图片剪裁成圆形,主要思路就是使用canvas绘图,把剪裁的图片绘制成圆形,另外剪裁图片的窗口还可以移动放大缩小,这个功能就用了微信组件movable-view,好了,该说的也说完了,下面咱们开始撸代码. movable-view组件 可移动的视图容器,在页面中可以拖拽滑动 会有好多个属性,在这里不一一介绍,只说我们能

  • 微信小程序实现上传图片裁剪图片过程解析

    有的时候我们上传头像,商品图片这些的时候有的希望上传的是自己想要的图片形状,吧图片宽高固定死的话,他又会变形,比列差不多的看起来没什么区别,不固定的话,他们会宽的高的不一样,看起来完全不舒服,不美观了. 所以想了个这样的办法,用这个裁剪工具,在选择图片的时候,就把图片的大小裁剪成自己想要的大小,这样就都一致了,下面我们来看看吧! wxml: <view class="wancll-padded-15 wancll-bg-white wancll-font-size-14">

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

    本文实例为大家分享了微信小程序实现裁剪图片大小的具体代码,供大家参考,具体内容如下 效果图 .wxml <button bindtap="uploadtap">上传图片</button> <image style="width: 100%;" mode="widthFix" src="{{canfile_image}}"></image> <canvas canvas-id

  • 微信小程序动态设置图片大小的方法

    我们都知道微信小程序的组件image是用来显示图片的,它有一下几个属性: 1.src              图片资源地址 2.mode          图片裁剪.缩放的模式 3.binderror     当错误发生时,发布到 AppService 的事件名,事件对象event.detail = {errMsg: 'something wrong'} 4.bindload     当图片载入完毕时,发布到 AppService 的事件名,事件对象event.detail = {height

  • 微信小程序 chooseImage选择图片或者拍照

    微信小程序 chooseImage选择图片或者拍照 一.使用API wx.chooseImage(OBJECT) var util = require('../../utils/util.js') Page({ data:{ src:"../image/pic4.jpg" }, gotoShow: function(){var _this = this wx.chooseImage({ count: 9, // 最多可以选择的图片张数,默认9 sizeType: ['original'

  • 微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能

    1.多张图片循环渲染后预览.保存.识别带参数二维码 wxml页面 <view wx:for="{{imgalist}}" wx:for-item="image" class="previewimg"> <image src="{{image}}" data-src="{{image}}" bindtap="previewImage"></image>

  • 微信小程序内拖动图片实现移动、放大、旋转的方法

    屏幕就像是数学上的坐标轴,且在第四象限,以屏幕左上角为圆点,X轴向右为正向左为负,Y轴向下为正向上为负(这点和数学上相反的)以圆点为基点画个距离圆点上下50宽高100的矩形来演示canvas基本用法 微信小程序这里提供了两个API wx.createContext() 创建并返回绘图上下文context对象 getActions 获取当前context上存储的绘图动作,对应wx.drawCanvas(object)中的actions clearActions 清空当前的存储绘图动作 wx.dra

  • 微信小程序实现的图片保存功能示例

    本文实例讲述了微信小程序实现的图片保存功能.分享给大家供大家参考,具体如下: 微信小程序保存图片分为两步: 1.下载文件资源到本地,客户端直接发起一个 HTTP GET 请求,返回文件的本地临时路径. 即:调用函数wx.downloadFile({}) 2.保存图片到系统相册. 即:调用函数wx.saveImageToPhotosAlbum({}) 具体代码如下: .wxml <button data-image='{{图片路径}}' bindtap="saveImage" &g

  • 微信小程序自定义支持图片的弹窗

    本文实例为大家分享了微信小程序自定义支持图片的弹窗,供大家参考,具体内容如下 为index.wxml添加如下图代码: (微信小程序 - canvas层级最高问题,如何超越canvas的层级,只能使用cover-view标签) <!--index.wxml--> <button class="show-btn" bindtap="showDialogBtn">弹窗</button> <!--弹窗--> <cover

  • 微信小程序比较两个数大小的实现方法

    目录 效果图 wxml代码 wxss代码 index.js代码 总结 效果图 wxml代码 <!--index.wxml--> <view class="demo-box"> <text class="title">请输入第一个数字:</text> <input type="number" bindchange='num1change'/> </view> <view

  • Android分享微信小程序技巧之图片优化

    前言 小菜上周接入了微信分享小程序的入口,基本功能实现都没问题,有需要的朋友可以了解一下 Android 分享微信小程序失败二三事,虽然功能都正常,但整体测试发现图片展示效果不佳.于是小菜整理了一个简单的小方法处理一下图片! 微信规定,分享小程序展示的图片应该在 128KB 以内,同时图片默认展示比例为 5:4,这样小菜默认的图很多是竖直的图,只会展示一部分. 遮挡部分图片 规定 小菜尝试了图片的[等比压缩][非等比压缩]和[不压缩],效果依旧不合适,图片所占位置默认以横向方向填充满分享出的布局

随机推荐