# image-cropper **Repository Path**: gnliscream/image-cropper ## Basic Information - **Project Name**: image-cropper - **Description**: 微信小程序裁剪组件,支持前端裁剪和后端裁剪两种方式 1.前端裁剪:将裁剪框指定的区域,单独生成图片,获取裁剪图片的临时文件路径 2.后端裁剪:获取裁剪框相对于原图的像素坐标位置,将裁剪区域坐标以及原图临时文件路径,传到后端进行图片裁剪 - **Primary Language**: 微信 - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 19 - **Forks**: 8 - **Created**: 2020-11-06 - **Last Updated**: 2024-09-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Cropping ## 小程序码 ![](/images/1.jpg) ## 组件介绍 微信小程序裁剪组件,支持前端裁剪和后端裁剪两种方式 1.前端裁剪:将裁剪框指定的区域,单独生成图片,获取裁剪图片的临时文件路径 2.后端裁剪:获取裁剪框相对于原图的像素坐标位置,将裁剪区域坐标以及原图临时文件路径,传到后端进行图片裁剪 ## git地址 [https://gitee.com/gnliscream/image-cropper](https://gitee.com/gnliscream/image-cropper) ## 软件架构 使用微信小程序自定义组件开发 小程序自定义组件官网:[https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html](https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/wxml-wxss.html) ## 使用说明 ### 目录结构 ![](/images/2.jpg) ### 使用步骤 #### 1.下载组件源代码,放入小程序里自己定义的组件文件夹(例如/component) #### 2.创建图片裁剪界面(例如/pages/image) #### 3.image.json引入image-cropper组件 ```json { "usingComponents": { "image-cropper":"/component/image-cropper/index" } } ``` #### 4.image.wxss设置背景色为黑色 ```css page{ background-color: black; } .white{ color: #fff; font-size: 30rpx; } .black{ color: #333333; font-size: 30rpx; margin-top:10rpx; } ``` #### 5.image.wxml 添加image-cropper标签,如下 ```html ``` 可以在image-cropper标签内添加操作按钮,如下 ```html 裁剪框宽高比值 裁剪图片质量 ``` #### 6.image.js 首先需要在onLoad方法中,设置裁剪标签属性 ```js // 裁切对象 var cropper Page({ /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { // 根据标签id,获取到image-cropper对象,存储在全局变量cropper中 cropper = this.selectComponent("#my-cropper"); // 设置标签属性 this.setData({ // 从图片选择界面传原图临时文件地址给src src: options.imagePath, // 设置裁剪框宽高比值为 1(宽:高=1:1=1) aspectRatio: 1, // 设置是否等比缩放 isProportion: true, // 设置裁剪后的图片质量 quality: 1 }) }, }) ``` 然后添加按钮相应的绑定方法 ```js // 裁切对象 var cropper Page({ /** * 页面的初始数据 */ data: { }, /** * 生命周期函数--监听页面加载 */ onLoad: function (options) { // 根据标签id,获取到image-cropper对象,存储在全局变量cropper中 cropper = this.selectComponent("#my-cropper"); // 设置标签属性 this.setData({ src: options.imagePath, aspectRatio: 1, isProportion: true, quality: 1 }) }, btn1(e){ // 图片宽高比值 this.setData({ aspectRatio: e.detail.value.toFixed(1) }) }, btn2(e){ // 图片质量 this.setData({ quality: e.detail.value.toFixed(1) }) }, btn3(){ // 打开等比缩放 this.setData({ isProportion: true }) }, btn4(){ // 关闭等比缩放 this.setData({ isProportion: false }) }, btn5(){ // 调用image-cropper对象的getResults函数,获取裁剪参数 cropper.getResults(res =>{ console.log(res) }) }, btn6(){ // 调用image-cropper对象的getImagePath函数,获取裁剪后图片的地址 cropper.getImagePath(res =>{ console.log(res) }) } }) ``` ### 组件文档 #### 标签属性 参数|类型|默认值|说明 -|-|-|- src|String|-|图片路径 aspectRatio|Number|1|裁剪框宽高比值,范围 [0.4,3] isProportion|Boolean|false|是否开启宽高等比缩放 quality|Number|1|前端裁剪的裁剪图片质量,范围 (0,1] #### 标签对象函数 ##### 1.获取裁剪结果参数 ``` getResults(res=>{ }) ``` 获取到的res如下 ```json { "crop":{ "width": 1000, //裁剪完成的图片宽 "height": 1000, //裁剪完成的图片高 "top": 100, //裁剪完成的图片左上角,到原图顶部的距离 "left": 200 //裁剪完成的图片左上角,到原图左边的距离 }, "originalImageInfo":{ "width": 1920, //原图宽 "height": 1080, //原图高 "path": "images/1.jpg", //原图路径 "type": "jpeg", //原图类型 "orientation": "up" //原图拍摄设备方向 } } ``` 获取到的裁剪参数的对应关系图 ![](/images/3.jpg) 获取到裁剪参数后,将原图以及裁剪参数传到后台进行裁剪 2.获取裁剪图片地址 ``` getImagePath(res=>{ }) ``` 获取到的res如下 ```json { "path" : "http://tmp/wxb172f5d66edf27aa.jpg" } ```