Vue图片裁剪组件实例代码


Posted in Vue.js onJuly 02, 2021

示例:

Vue图片裁剪组件实例代码

tip: 该组件基于vue-cropper二次封装

安装插件

npm install vue-cropper

yarn add vue-cropper

写入封装的组件

<!-- 简易图片裁剪组件 --- 二次封装 -->
<!-- 更多api https://github.com/xyxiao001/vue-cropper -->
<!-- 使用:传入图片 比例 显示隐藏。方法:监听底部按钮点击即可  ---更多props查询文档自行添加 -->

<template>
  <div v-if="value" :value="value" @input="val => $emit('input', val)" class="conbox">
    <div class="info">
      <vueCropper
        ref="cropper"
        :img="img"
        :outputSize="outputSize"
        :outputType="outputType"
        :info="info"
        :canScale="canScale"
        :autoCrop="autoCrop"
        :fixed="fixed"
        :fixedNumber="fixedNumber"
        :full="full"
        :fixedBox="fixedBox"
        :canMove="canMove"
        :canMoveBox="canMoveBox"
        :original="original"
        :centerBox="centerBox"
        :infoTrue="infoTrue"
        :mode="mode"
      ></vueCropper>
    </div>
    <div class="btns">
      <div @click="clickCancelCut" class="cancel">取消</div>
      <img @click="clickRotate" src="../../assets/paradise/rotate.png" alt="" />
      <div @click="clickOk" class="okey">确定</div>
    </div>
  </div>
</template>

<script>
import { VueCropper } from 'vue-cropper';
export default {
  name: 'PictureCropping',
  components: { VueCropper },
  props: {
    value: {
      type: Boolean,
      default: false,
    },
    //裁剪图片的地址
    img: {
      type: String,
      default: '',
    },
    //截图框的宽高比例
    fixedNumber: {
      type: Array,
      default: () => {
        return [1, 1];
      },
    },
  },
  data() {
    return {
      // 裁剪组件的基础配置option
      //   img: this.img, // 裁剪图片的地址
      outputSize: 1, // 裁剪生成图片的质量
      outputType: 'jpeg', // 裁剪生成图片的格式
      info: true, // 裁剪框的大小信息
      canScale: true, // 图片是否允许滚轮缩放
      autoCrop: true, // 是否默认生成截图框
      // autoCropWidth: 300, // 默认生成截图框宽度
      // autoCropHeight: 200, // 默认生成截图框高度
      fixed: true, // 是否开启截图框宽高固定比例
      //   fixedNumber: this.fixedNumber, // 截图框的宽高比例
      full: true, // 是否输出原图比例的截图
      fixedBox: true, // 固定截图框大小 不允许改变
      canMove: true, //上传图片是否可以移动
      canMoveBox: true, // 截图框能否拖动
      original: false, // 上传图片按照原始比例渲染
      centerBox: true, // 截图框是否被限制在图片里面
      // high:true,// 是否按照设备的dpr 输出等比例图片
      infoTrue: true, // true 为展示真实输出图片宽高 false 展示看到的截图框宽高
      // maxImgSize: 2000, //限制图片最大宽度和高度
      // enlarge: 1, //图片根据截图框输出比例倍数
      mode: 'contain', //图片默认渲染方式
    };
  },
  computed: {},
  watch: {},
  //生命周期 - 创建完成(访问当前this实例)
  created() {},
  //生命周期 - 挂载完成(访问DOM元素)
  mounted() {},
  methods: {
    clickCancelCut() {
      this.$emit('clickCancelCut', '点击取消');
      this.$refs.cropper.stopCrop();
      this.$refs.cropper.clearCrop();
    },
    clickRotate() {
      this.$refs.cropper.rotateRight();
      this.$emit('clickRotate', '点击旋转');
    },
    clickOk() {
      //输出裁剪的base64
      this.$refs.cropper.getCropData(data => {
        this.$emit('clickOk', data);
        this.$refs.cropper.stopCrop();
        this.$refs.cropper.clearCrop();
      });
    },
  },
};
</script>
<style lang='less' scoped>
/* @import url(); 引入css类 */
.conbox {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  box-sizing: border-box;
  height: 100vh;
  width: 100%;
  background-color: #000;
  display: flex;
  flex-direction: column;
  justify-content: center;
  .info {
    width: auto;
    height: 800px;
    .vue-cropper {
      background-image: none;
      background-color: #000;
    }
  }
  .btns {
    padding: 0 20px;

    color: #fff;
    text-align: center;
    display: flex;
    justify-content: space-between;
    align-items: center;
    position: absolute;
    left: 0;
    right: 0;
    bottom: 15px;
    img {
      width: 85px;
      height: 85px;
    }
    .cancel {
      background-color: #606465;
      padding: 15px 20px;
      width: 100px;
      border-radius: 10px;
    }
    .okey {
      background-color: #df6457;
      padding: 15px 20px;
      width: 100px;
      border-radius: 10px;
    }
  }
}
</style>

总结

到此这篇关于Vue图片裁剪组件的文章就介绍到这了,更多相关Vue图片裁剪组件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
vue单元格多列合并的实现
Nov 26 Vue.js
vuex的数据渲染与修改浅析
Nov 26 Vue.js
vue实现表格合并功能
Dec 01 Vue.js
vue中如何添加百度统计代码
Dec 19 Vue.js
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
Jan 05 Vue.js
vue编写简单的购物车功能
Jan 08 Vue.js
Vuex实现简单购物车
Jan 10 Vue.js
如何在 Vue 表单中处理图片
Jan 26 Vue.js
Vue 实例中使用$refs的注意事项
Jan 29 Vue.js
如何理解Vue简单状态管理之store模式
May 15 Vue.js
springboot+VUE实现登录注册
May 27 Vue.js
vue使用watch监听属性变化
Apr 30 Vue.js
vue3中provide && inject的使用
Jul 01 #Vue.js
vue中利用mqtt服务端实现即时通讯的步骤记录
Jul 01 #Vue.js
vue+element ui实现锚点定位
Jun 29 #Vue.js
vue实现锚点定位功能
Vue实现tab导航栏并支持左右滑动功能
Vue3.0写自定义指令的简单步骤记录
vue.js Router中嵌套路由的实用示例
Jun 27 #Vue.js
You might like
PHP+MYSQL的文章管理系统(一)
2006/10/09 PHP
推荐几款用 Sublime Text 开发 Laravel 所用到的插件
2014/10/30 PHP
php搜索文件程序分享
2015/10/30 PHP
php curl发送请求实例方法
2019/08/01 PHP
utf8的编码算法 转载
2006/12/27 Javascript
说明你的Javascript技术很烂的五个原因
2011/04/26 Javascript
JavaScript 基础篇(一)
2012/03/30 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
jQuery前端框架easyui使用Dialog时bug处理
2014/12/05 Javascript
jQuery的context属性用法实例
2014/12/27 Javascript
基于Jquery实现表单验证
2020/07/20 Javascript
Angular的模块化(代码分享)
2016/12/26 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
2014/07/14 Python
Python使用numpy产生正态分布随机数的向量或矩阵操作示例
2018/08/22 Python
对python pandas读取剪贴板内容的方法详解
2019/01/24 Python
python实现比较类的两个instance(对象)是否相等的方法分析
2019/06/26 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
python 循环数据赋值实例
2019/12/02 Python
如何使用python传入不确定个数参数
2020/02/18 Python
pytorch进行上采样的种类实例
2020/02/18 Python
python用WxPython库实现无边框窗体和透明窗体实现方法详解
2020/02/21 Python
Python小整数对象池和字符串intern实例解析
2020/03/21 Python
Python新手学习函数默认参数设置
2020/06/03 Python
python3环境搭建过程(利用Anaconda+pycharm)完整版
2020/08/19 Python
python excel和yaml文件的读取封装
2021/01/12 Python
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
MySQL面试题
2014/01/12 面试题
完美主义个人的自我评价
2014/02/17 职场文书
职业女性的职业规划
2014/03/04 职场文书
优秀电子工程系毕业生求职信
2014/05/24 职场文书
教师三严三实心得体会
2014/10/11 职场文书
2014年电厂工作总结
2014/12/04 职场文书
统计工作个人总结
2015/03/03 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书