1、安装

cnpm install cropperjs
    // 引入import Cropper from 'cropperjs'import 'cropperjs/dist/cropper.min.css'

2、上传裁剪

上传图片到oss然后进行裁剪将x,y,width,height拼接到图片链接上即完成裁剪。

在弹框中实现图片裁剪及预览。

<div class="content_div"><!--上传图片--><el-uploadclass="avatar-uploader tailor_class"v-loading="loading"action="/api/base/file/upload":show-file-list="false":on-progress="progressFile":on-success="saveFileList"><img v-if="item_images" :src="item_images" class="avatar"><!--                                <img v-if="item_images" class="avatar">--><i v-else class="el-icon-plus avatar-uploader-icon"></i></el-upload><!--弹框--><el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="600px":before-close="cancelCropper"class="dialog_box"><div class="rc-cropper clearfix" v-if="item_images"><img v-if="item_images" id="img_id" ref="canvasRef" :src="item_images"class="avatar"><div class="preview_box" v-show="finalImg!=''"><div class="preview_word">预览图片</div><div class="preview_img_box"><img class="preview_img" :src="finalImg"></div></div></div><!--限制比例--><div style="margin-top: 20px" v-show="item_images"><el-radio v-model="cropProportionSelect" label="0" border size="medium">不限制比例</el-radio><el-radio v-model="cropProportionSelect" label="1" border size="medium">2.35 :1</el-radio><el-radio v-model="cropProportionSelect" label="2" border size="medium">1 :1</el-radio></div><div slot="footer" class="dialog-footer clearfix"><el-button type="primary" @click="sureCropper">确 定</el-button><el-button style="float: right !important;margin-right: 10px"@click="cancelCropper">取 消</el-button></div></el-dialog></div>
                loading:false,                item_images: '',//原图finalImg: '',//剪切图cropper: null,croppShow: false,//剪裁是否显示dialogTitle: '剪裁图片',//弹框标题dialogVisible: false,//弹框显示状态cropProportionSelect: '0',//裁剪框比例选择cropProportion: '',//剪裁框比例x: 0,y: 0,width: 0,height: 0,
watch: {cropProportionSelect(nv, ov) {this.cropper.destroy();if (nv == 0 + '') {this.cropProportion = NaN;this.showCropper();} else if (nv == 1 + '') {this.cropProportion =2.35;this.showCropper();} else if (nv == 2 + '') {this.cropProportion = 1;this.showCropper();}}},
//上传文件中progressFile() {this.item_images = '';this.finalImg = '';this.loading = true;},//图片上传saveFileList(response, file, fileList) {console.log(file)this.item_images = file.response.data;this.loading = false;console.log("item_images:" + JSON.stringify(this.item_images));if (this.item_images != '') {this.dialogVisible = true;this.showCropper();}},//剪裁框渲染showCropper() {let that = this;this.croppShow = truesetTimeout(() => {let canvas = document.getElementById("img_id")let cropper = new Cropper(canvas, {// initialAspectRatio: 1 / 1,//裁剪框宽高比的初始值 默认与图片宽高比相同 只有在aspectRatio没有设置的情况下可用aspectRatio: that.cropProportion,//设置裁剪框为固定的宽高比minContainerHeight: 200,//容器最小高度autoCropArea: 0.6,//定义自动裁剪区域大小(百分比)// zoomable:false,//不缩放图片// zoomOnWheel:false,//滚动鼠标缩放background: false,//背景网格guides: false,//裁剪框虚线viewMode: 1,//裁剪框不超出图片dragMode: 'none',crop(event) {// console.log(event.detail.x);// console.log(event.detail.y);// console.log(event.detail.width);// console.log(event.detail.height);// console.log(event.detail.rotate);// console.log(event.detail.scaleX);// console.log(event.detail.scaleY);that.x = parseInt(event.detail.x)that.y = parseInt(event.detail.y)that.width = parseInt(event.detail.width)that.height = parseInt(event.detail.height)// that.finalImg=that.item_images+`?x-oss-process=image/crop,x_${event.detail.x},y_${event.detail.y},w_${event.detail.width},h_${event.detail.height}`that.finalImg = that.item_images + `?x-oss-process=image/crop,x_${that.x},y_${that.y},w_${that.width},h_${that.height}`// console.log(that.finalImg)},})this.cropper = cropper}, 10)},// 确认裁剪sureCropper() {let obj = {image_url: this.item_images,image_cutting_url: this.finalImg,}this.$http.post("/api/manager/image/cutting", obj).then(res => {let data = res.data.data;this.dialogVisible = false;this.croppShow = false;this.item_images = this.finalImg;this.loadList();})},// 销毁裁剪框cancelCropper() {this.dialogVisible = false;this.cropper.destroy()this.croppShow = falsethis.cropper = null},

3、cropper附录

地址:https://github.com/fengyuanchen/cropperjs#mincontainerheight

翻译文档:

## 配置对象
> https://github.com/fengyuanchen/cropperjs
__注意:第一个值为默认值__- viewMode 视图控制- 0 无限制- 1 限制裁剪框不能超出图片的范围- 2 限制裁剪框不能超出图片的范围 且图片填充模式为 cover 最长边填充- 3 限制裁剪框不能超出图片的范围 且图片填充模式为 contain 最短边填充
- dragMode 拖拽图片模式- crop 形成新的裁剪框- move 图片可移动- none 什么也没有
- initialAspectRatio 裁剪框宽高比的初始值 默认与图片宽高比相同 只有在aspectRatio没有设置的情况下可用
- aspectRatio 设置裁剪框为固定的宽高比
- data 之前存储的裁剪后的数据 在初始化时会自动设置 只有在autoCrop设置为true时可用
- preview 预览 设置一个区域容器预览裁剪后的结果- Element, Array (elements), NodeList or String (selector)
- responsive 在窗口尺寸调整后 进行响应式的重渲染 默认true
- restore 在窗口尺寸调整后 恢复被裁剪的区域 默认true
- checkCrossOrigin 检查图片是否跨域 默认true 如果是 会在被复制的图片元素上加上属性crossOrigin 并且在src上加上一个时间戳 避免重加载图片时因为浏览器缓存而加载错误
- checkOrientation 检查图片的方向信息(仅JPEG图片有)默认true 在旋转图片时会对图片方向值做一些处理 以解决IOS设备上的一些问题
- modal 是否显示图片和裁剪框之间的黑色蒙版 默认true
- guides 是否显示裁剪框的虚线 默认true
- center 是否显示裁剪框中间的 ‘+’ 指示器 默认true
- highlight 是否显示裁剪框上面的白色蒙版 (很淡)默认true
- background 是否在容器内显示网格状的背景 默认true
- autoCrop 允许初始化时自动的裁剪图片 配合 data 使用 默认true
- autoCropArea 设置裁剪区域占图片的大小 值为 0-1 默认 0.8 表示 80%的区域
- movable 是否可以移动图片 默认true
- rotatable 是否可以旋转图片 默认true
- scalable 是否可以缩放图片(可以改变长宽) 默认true
- zoomable 是否可以缩放图片(改变焦距) 默认true
- zoomOnTouch 是否可以通过拖拽触摸缩放图片 默认true
- zoomOnWheel 是否可以通过鼠标滚轮缩放图片 默认true
- wheelZoomRatio 设置鼠标滚轮缩放的灵敏度 默认 0.1
- cropBoxMovable 是否可以拖拽裁剪框 默认true
- cropBoxResizable 是否可以改变裁剪框的尺寸 默认true
- toggleDragModeOnDblclick 是否可以通过双击切换拖拽图片模式(move和crop)默认true 当拖拽图片模式为none时不可切换 该设置必须浏览器支持双击事件
- minContainerWidth(200)、minContainerHeight(100)、minCanvasWidth(0)、minCanvasHeight(0)、minCropBoxWidth(0)、minCropBoxHeight(0) 容器、图片、裁剪框的 最小宽高 括号内为默认值 注意 裁剪框的最小高宽是相对与页面而言的 并非相对图片## 方法
__注意:如果方法没有被设置返回任何值,那么它会返回一个cropper的实例 因此多个方法可以使用链式写法__- crop() 手动显示裁剪框
- reset() 重置图片和裁剪框为初始状态
- replace(url[, hasSameSize]) 替换图片路径并且重建裁剪框 - url 新路径- hasSameSize 默认值false 设置为true表示新老图片尺寸一样 只需要更换路径无需重建裁剪框
- enable() 解冻 裁剪框
- disable() 冻结 裁剪框
- destroy() 摧毁裁剪框并且移除cropper实例
- move(offsetX[, offsetY]) 移动图片指定距离 一个参数代表横纵向移动距离一样
- moveTo(x[, y]) 移动图片到一个指定的点 一个参数代表横纵向移动距离一样
- zoom(ratio) 缩放 ratio大于零是放大 小于零缩小
- zoomTo(ratio[, pivot]) 缩放并设置中心点的位置
- rotate(degree) 旋转 类似css
- rotateTo(degree) 旋转到绝对角度
- scale(scaleX[, scaleY])、scaleX(scaleX)、scaleY(scaleY) 缩放 一个参数代表横纵向缩放值一样
- getData([rounded]) 返回裁剪区域基于原图片!原尺寸!的位置和尺寸 rounded默认为false 表示是否显示四舍五入后的数据 有了这些数据可以直接在原图上进行裁剪显示
- setData(data) 改变裁剪区域基于原图的位置和尺寸 仅当viewMode 不为0时有效
- getContainerData()、getImageData()、getCanvasData()、setCanvasData(data)、getCropBoxData()、setCropBoxData(data) 容器、图片容器(画布)、图片、裁剪区域相对容器的数据设置和获取
- getCroppedCanvas([options]) 得到被裁剪图片的一个canvas对象 options设置这个canvas的一些数据- width、height、minWidth、minHeight、maxWidth、maxHeight、fillColor、imageSmoothingEnabled(图片是否是光滑的 默认true)、imageSmoothingQuality(图片的质量 默认low 还有medium、high)
- setAspectRatio(aspectRatio) 改变裁剪区域的宽高比
- setDragMode([mode]) 设置拖拽图片模式## 事件
- ready 渲染前(图片已经被加载、cropper实例已经准备完毕)的准备工作事件
- cropstart、cropmove、cropend、crop 开始画裁剪框(或画布)、画裁剪框(或画布)的中途、裁剪框(或画布)画完、进行裁剪事件 event.detail.originalEvent、event.detail.action- 当autoCrop为true crop事件会在ready之前触发
- zoom 裁剪框缩放事件

vue-cropper图片裁剪 PC相关推荐

  1. 史上最全基于vue的图片裁剪vue-cropper使用

    史上最全基于vue的图片裁剪vue-cropper使用 基于vue的图片裁剪vue-cropper 新的需求 vue-cropper官网 代码拷贝 最后 基于vue的图片裁剪vue-cropper 最 ...

  2. vue实现图片裁剪后上传

    一.背景 目前负责的系统(商城后台管理系统)里面有这么一个需求,为了配合前台的展示,上传的商品图片比较必须是1:1的正方形.(其它地方有时会有5:4或者16:9的需求,但较少).所以需要对上传的图片先 ...

  3. Vue - 实现图片裁剪功能,并上传到服务器(内置第三方最优秀的裁剪图片组件,上传到服务器功能)干净整洁无 BUG 的示例源码与超详细的注释,兼容任意浏览器

    前言 您可以滑动到文章最底部,直接克隆完整示例 Gitee 仓库,与本文教程最终效果一致. 在项目开发中,您难免会遇到图片上传到服务器之前,用户可进行裁剪的需求, 在看了网上大部分教程后,代码都非常乱 ...

  4. 基于vue的图片裁剪框的实现

    1.基于vue建设一个裁剪框 全文附录我会放到最后,有需要的小伙伴自取 ## 1.1在没有添加图片的时候显示如上图的css样式 <label class="h-photo-left&q ...

  5. Vue 项目中 Cropper 图片裁剪的使用及遇到的问题

    为什么用 个人中心的头像上传需要对图片进行裁剪 1.安装引入 npm install vue-cropper 在 main.js 中 import VueCropper from 'vue-cropp ...

  6. 基于Vue的图片裁剪 vue-cropper

    今天做项目遇到了这样一个需求:对于要上传的图片进行裁剪,于是发现了一个好的工具----vue-cropper 首先下载vue-cropper npm install vue-cropper 引入vue ...

  7. vue做图片裁剪——vue-cropper

    这里使用的是vue-cropper  官方文档以及案例在这里 先安装 npm install vue-cropper 裁剪图片组件 注意事项: 1.代码中设置的是只有正确的url是才展示,裁剪组件 2 ...

  8. 基于vue的图片裁剪插件vue-cropper

    我在网上找了很多关于vue裁剪图片的文章,demo都太长了,实在是太长了.有些还都看不懂,最后还是用了个大佬的demo,但是项目实践过程中还是有问题没解决.先介绍吧.效果是下面这样的, 我这里采用了4 ...

  9. 【前端知识】Cropper图片裁剪插件中文文档

    Cropper 插件教程 cropper官网 cropperjs下载地址 cropper视频教程 插件导入 <link rel="stylesheet" href=" ...

最新文章

  1. 在阿里AI实验室做NLP高级算法工程师是一种什么样的体验?
  2. luogu P3410 拍照(最大权闭合图转最小割)
  3. 阿里“火拼”拼多多,要“1元”抢占下沉市场
  4. windows域中时间同步的解决方案
  5. 在ASP.NET MVC中使用Log4Net记录异常日志,出错时导向到静态页
  6. WCF 入门之旅(4): 怎样用客户端调用WCF服务
  7. Qt中的QProgressDialog
  8. 博士申请 | 加拿大Mila实验室唐建教授招收深度学习方向博士生和实习生
  9. JAVA入门级教学之(数据转换规则)
  10. word中如何优雅的显示代码
  11. java实习日志_Java毕业生校外实习日记
  12. Apache 绿色版本官方版本下载
  13. 任玉刚【Android开发艺术探索】读后笔记三
  14. login.defs文件基础
  15. Playrix《梦想小镇》为何能成为10亿美元独角兽?
  16. starlink卫星轨道预报
  17. 康考迪亚大学应用计算机科学,康考迪亚大学专业设置详情
  18. (一)验证微信公众平台
  19. java计算机毕业设计汽车票订购系统源码+程序+lw文档+mysql数据库
  20. 读取nii或nii.gz文件中的信息即输出图像

热门文章

  1. nodejs.ReferenceError:window is not defined
  2. 编程篇 - esp 8266物联网开发板 - 给板子编写并且烧录程序, 整点有意思的效果
  3. 负反馈与马歇尔的均衡论
  4. java转大数据的学习路线
  5. 弘辽科技:直通车如何降低PPC
  6. 米的换算单位和公式_米的单位换算公式大全(长度单位大全表)
  7. 【C/C++】基础概念
  8. 采用CAD刀模插件(飞狼刀模工具箱)批理倒圆角
  9. 眨眼照片变名画,华为P20,创造着艺术,也是艺术本身
  10. 计算机等级考试二级要学PS,计算机二级考试PS要考什么,和考试的方式是什么?...