基于cropper.js封装vue在线图片裁剪组件

vue使用 vue-cropper插件封装图片裁剪等功能 安装vue-cropper npm install vue-cropper 在.vue的文件中引入: <template> <div class="hello"> <div style="width:600px;height:600px;"> <vueCropper ... 阅读详情

cropper-demo.jpg

github:demo下载

cropper.js

github:cropper.js

官网(demo)

cropper.js 安装
  • npm或bower安装
npm install cropper
# or
bower install cropper
git clone https://github.com/fengyuanchen/cropper.git
引用cropper.js
  • 主要引用cropper.js跟cropper.css两个文件
<script src="/path/to/jquery.js"></script><!-- jQuery is required -->
<link  href="/path/to/cropper.css" rel="stylesheet">
<script src="/path/to/cropper.js"></script>

注意:必须先引入jquery文件,才能使用cropper.js插件

简单使用
  • 构建截图所要用到的div容器
<!-- Wrap the image or canvas element with a block element (container) -->
<div>
  ![](picture.jpg)
</div>
  • 添加容器的样式,让img填充满整个容器(很重要)
/* Limit image width to avoid overflow the container */
img {
  max-width: 100%; /* This rule is very important, please do not ignore this! */
}
  • 调用cropper.js方法,初始化截图控件
$('#image').cropper({
  aspectRatio: 16 / 9,
  crop: function(e) {
    // Output the result data for cropping image.
    console.log(e.x);
    console.log(e.y);
    console.log(e.width);
    console.log(e.height);
    console.log(e.rotate);
    console.log(e.scaleX);
    console.log(e.scaleY);
  }
});

其他详细api请参考:github:cropper.js

封装成vue组件

封装成vue组件中需解决的问题
  • cropper.js相关
    • 模拟input框点击选择图片并对选择的图片进行格式、大小限制
    • 重新选择图片裁剪
    • 确认裁剪并获取base64格式的图片信息
  • vue相关
    • 非父子组件之间的通信问题
模拟input框点击选择图片并对选择的图片进行格式、大小限制
  • 构建一个隐藏的input标签,然后模拟点击此input,从而达到能选择图片的功能
<!-- input框 -->
<input id="myCropper-input" type="file" :accept="imgCropperData.accept" ref="inputer" @change="handleFile">
//模拟点击
document.getElementById('myCropper-input').click();
  • 给input绑定一个监听内容变化的方法,拿到上传的文件,并进行格式、大小校验
// imgCropperData: {
//   accept: 'image/gif, image/jpeg, image/png, image/bmp',
// }
handleFile (e) {
  let _this = this;
  let inputDOM = this.$refs.inputer;
  // 通过DOM取文件数据
  _this.file = inputDOM.files[0];
  // 判断文件格式
  if (_this.imgCropperData.accept.indexOf(_this.file.type) == -1) {
    _this.$Modal.error({
      title: '格式错误',
      content: '您选择的图片格式不正确!'
    });
    return;
  }
  // 判断文件大小限制
  if (_this.file.size > 5242880) {
    _this.$Modal.error({
      title: '超出限制',
      content: '您选择的图片过大,请选择5MB以内的图片!'
    });
    return;
  }
  var reader = new FileReader();
  // 将图片将转成 base64 格式
  reader.readAsDataURL(_this.file);
  reader.onload = function () {
    _this.imgCropperData.imgSrc = this.result;
    _this.initCropper();
  }
}

参考:从0开始做一个的Vue图片/ 文件选择(上传)组件[基础向]

重新选择图片裁剪
  • 当第一次选择图片之后,肯定会面临需要重选图片的问题,那么就会面临如何替换掉裁剪框中的图片,上面的步骤选择了图片后通过FileRender()方法拿到了图片的主要信息,现在就需要重新构建裁剪框就可以解决问题了,查看cropper.js给出的官方demo,发现官方是使用动态添加裁剪容器的方法,进行操作的,这里我们仿照官方进行实现。
// 初始化剪切
  initCropper () {
    let _this = this;
    // 初始化裁剪区域
    _this.imgObj = $('![](' + _this.imgCropperData.imgSrc + ')');
    let $avatarPreview = $('.avatar-preview');
    $('#myCropper-workspace').empty().html(_this.imgObj);
    _this.imgObj.cropper({
      aspectRatio: _this.proportionX / _this.proportionY,
      preview: $avatarPreview,
      crop: function(e) {

      }
    });
  }
确认裁剪并获取base64格式的图片信息
let $imgData = _this.imgObj.cropper('getCroppedCanvas')
imgBase64Data = $imgData.toDataURL('image/png'); 
构造用于上传的数据
// 构造上传图片的数据
let formData = new FormData();
// 截取字符串
let photoType = imgBase64Data.substring(imgBase64Data.indexOf(",") + 1);
//进制转换
const b64toBlob = (b64Data, contentType = '', sliceSize = 512) => {
  const byteCharacters = atob(b64Data);
  const byteArrays = [];
  for(let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
    const slice = byteCharacters.slice(offset, offset + sliceSize);
    const byteNumbers = new Array(slice.length);
    for(let i = 0; i < slice.length; i++) {
      byteNumbers[i] = slice.charCodeAt(i);
    }
    const byteArray = new Uint8Array(byteNumbers);
    byteArrays.push(byteArray);
  }
  const blob = new Blob(byteArrays, {
    type: contentType
  });
  return blob;
}
const contentType = 'image/jepg';
const b64Data2 = photoType;
const blob = b64toBlob(b64Data2, contentType);
formData.append("file", blob, "client-camera-photo.png")
formData.append("type", _this.imgType)
非父子组件之间的通信问题

在之前的项目中,常用到父子组件之间的通信传参,一般用两种方法

  • 在router里面放置参数,然后通过调用 route.params.xxx或者 route.query.xxx进行获取
  • 通过props进行通信

    这里我们使用eventBus进行组件之间的通信

步骤

1.声明一个bus组件用于B组件把参数传递给A组件

//bus.js
import Vue from 'vue';  
export default new Vue();

2.在A组件中引用bus组件,并实时监听其参数变化

// A.vue
import Bus from '../../components/bus/bus.js'

export default {
  components: { Bus },
  data () {},
  created: function () {
    Bus.$on('getTarget', imgToken => {  
      var _this = this;
      console.log(imgToken);
      ...  
    });  
  }
}

3.B组件中同样引用bus组件,来把参数传给A组件

// B.vue
// 传参
Bus.$emit('getTarget', imgToken); 

参考:

vue选图截图插件完整代码

<template>
  <div class="myCropper-container">
    <div id="myCropper-workspace">
      <div class="myCropper-words" v-show="!imgCropperData.imgSrc">请点击按钮选择图片进行裁剪</div>
    </div>
    <div class="myCropper-preview" :class="isShort ? 'myCropper-preview-short' : 'myCropper-preview-long'">
      <div class="myCropper-preview-1 avatar-preview">
        ![](!imgCropperData.imgUploadSrc ? '/images/thumbnail/thumbnail-img.jpg' : imgCropperData.imgUploadSrc)
      </div>
      <div class="myCropper-preview-2 avatar-preview">
        ![](!imgCropperData.imgUploadSrc ? '/images/thumbnail/thumbnail-img.jpg' : imgCropperData.imgUploadSrc)
      </div>
      <div class="myCropper-preview-3 avatar-preview">
        ![](!imgCropperData.imgUploadSrc ? '/images/thumbnail/thumbnail-img.jpg' : imgCropperData.imgUploadSrc)
      </div>
      <input id="myCropper-input" type="file" :accept="imgCropperData.accept" ref="inputer" @change="handleFile">
      <Button type="ghost" class="myCropper-btn" @click="btnClick">选择图片</Button>
      <Button type="primary" class="myCropper-btn" :loading="cropperLoading" @click="crop_ok">确认</Button>
    </div>


  </div>
</template>

<script>
  var ezjsUtil = Vue.ezjsUtil;
  import Bus from './bus/bus.js' 

  export default {
    components: { Bus },
    props: {
      imgType: {
        type: String
      },
      proportionX: {
        type: Number
      },
      proportionY: {
        type: Number
      }
    },
    data () {
      return {
        imgCropperData: {
          accept: 'image/gif, image/jpeg, image/png, image/bmp',
          maxSize: 5242880,
          file: null, //上传的文件
          imgSrc: '', //读取的img文件base64数据流
          imgUploadSrc: '', //裁剪之后的img文件base64数据流
        },
        imgObj: null,
        hasSelectImg: false,
        cropperLoading: false,
        isShort: false,
      }
    },
    created: function () {
      let _this = this;
    },
    mounted: function () {
      let _this = this;
      // 初始化预览区域
      let maxWidthNum = Math.floor(300 / _this.proportionX);
      let previewWidth = maxWidthNum * _this.proportionX;
      let previewHeight = maxWidthNum * _this.proportionY;
      if (previewWidth / previewHeight <= 1.7) {
        previewWidth = previewWidth / 2;
        previewHeight = previewHeight / 2;
        _this.isShort = true;
      }
      // 设置最大预览容器的宽高
      $('.myCropper-preview-1').css('width', previewWidth + 'px');
      $('.myCropper-preview-1').css('height', previewHeight + 'px');
      // 设置中等预览容器的宽高
      $('.myCropper-container .myCropper-preview .myCropper-preview-2').css('width',( previewWidth / 2) + 'px');
      $('.myCropper-container .myCropper-preview .myCropper-preview-2').css('height', (previewHeight / 2) + 'px');
      // 设置最小预览容器的宽高
      $('.myCropper-container .myCropper-preview .myCropper-preview-3').css('width',( previewWidth / 4) + 'px');
      $('.myCropper-container .myCropper-preview .myCropper-preview-3').css('height', (previewHeight / 4) + 'px');
    },
    methods: {
      // 点击选择图片
      btnClick () {
        let _this = this;
        // 模拟input点击选择文件
        document.getElementById('myCropper-input').click();
      },
      // 选择之后的回调
      handleFile (e) {
        let _this = this;
        let inputDOM = this.$refs.inputer;
        // 通过DOM取文件数据
        _this.file = inputDOM.files[0];
        // 判断文件格式
        if (_this.imgCropperData.accept.indexOf(_this.file.type) == -1) {
          _this.$Modal.error({
            title: '格式错误',
            content: '您选择的图片格式不正确!'
          });
          return;
        }
        // 判断文件大小限制
        if (_this.file.size > 5242880) {
          _this.$Modal.error({
            title: '超出限制',
            content: '您选择的图片过大,请选择5MB以内的图片!'
          });
          return;
        }
        var reader = new FileReader();
        // 将图片将转成 base64 格式
        reader.readAsDataURL(_this.file);
        reader.onload = function () {
          _this.imgCropperData.imgSrc = this.result;
          _this.initCropper();
        }
      },
      // 初始化剪切
      initCropper () {
        let _this = this;

        // 初始化裁剪区域
        _this.imgObj = $('![](' + _this.imgCropperData.imgSrc + ')');
        let $avatarPreview = $('.avatar-preview');
        $('#myCropper-workspace').empty().html(_this.imgObj);
        _this.imgObj.cropper({
          aspectRatio: _this.proportionX / _this.proportionY,
          preview: $avatarPreview,
          crop: function(e) {

          }
        });
        _this.hasSelectImg = true;
      },
      // 确认
      crop_ok () {
        let _this = this, imgToken = null, imgBase64Data = null;
        // 判断是否选择图片
        if (_this.hasSelectImg == false) {
          _this.$Modal.error({
            title: '裁剪失败',
            content: '请选择图片,然后进行裁剪操作!'
          });
          return false;
        }
        // 确认按钮不可用
        _this.cropperLoading = true;
        let $imgData = _this.imgObj.cropper('getCroppedCanvas')
        imgBase64Data = $imgData.toDataURL('image/png'); 
        // 构造上传图片的数据
        let formData = new FormData();
        // 截取字符串
        let photoType = imgBase64Data.substring(imgBase64Data.indexOf(",") + 1);
        //进制转换
                const b64toBlob = (b64Data, contentType = '', sliceSize = 512) => {
                    const byteCharacters = atob(b64Data);
                    const byteArrays = [];
                    for(let offset = 0; offset < byteCharacters.length; offset += sliceSize) {
                        const slice = byteCharacters.slice(offset, offset + sliceSize);
                        const byteNumbers = new Array(slice.length);
                        for(let i = 0; i < slice.length; i++) {
                            byteNumbers[i] = slice.charCodeAt(i);
                        }
                        const byteArray = new Uint8Array(byteNumbers);
                        byteArrays.push(byteArray);
                    }
                    const blob = new Blob(byteArrays, {
                        type: contentType
                    });
                    return blob;
        }
        const contentType = 'image/jepg';
                const b64Data2 = photoType;
        const blob = b64toBlob(b64Data2, contentType);
        formData.append("file", blob, "client-camera-photo.png")
        formData.append("type", _this.imgType)
        // ajax上传
        $.ajax({
                    url: _this.$nfs.uploadUrl,
                    method: 'POST',
                    data: formData,
                    // 默认为true,设为false后直到ajax请求结束(调完回掉函数)后才会执行$.ajax(...)后面的代码
                    async: false,
                    // 下面三个,因为直接使用FormData作为数据,contentType会自动设置,也不需要jquery做进一步的数据处理(序列化)。
                    cache: false,
                    contentType: false,
          processData: false,
          type: _this.imgType,
                    success: function(res) {
            let imgToken = res.data.token;
            _this.cropperLoading = false;
            // 传参
            Bus.$emit('getTarget', imgToken);  
                    },
                    error: function(error) {
            _this.cropperLoading = false;
            _this.$Modal.error({
              title: '系统错误',
              content: '请重新裁剪图片进行上传!'
            });
                    }
                });
      },

    }
  }
</script>

<style lang="less" scoped>
  .myCropper-container {
    height: 400px;
  }
  .myCropper-container #myCropper-input {
    width: 0px;
    height: 0px;
  }
  .myCropper-container #myCropper-workspace {
    width: 500px;
    height: 400px;
    border: 1px solid #dddee1;
    float: left;
  }
  // 裁剪图片未选择图片的提示文字
  .myCropper-container #myCropper-workspace .myCropper-words{
    text-align: center;
    font-size: 18px;
    padding-top: 180px;
  }
  // 裁剪图片的预览区域
  .myCropper-container .myCropper-preview-long {
    width: 300px;
  }
  .myCropper-container .myCropper-preview-short {
    width: 200px;
  }
  .myCropper-container .myCropper-preview {
    float: left;
    height: 400px;
    margin-left: 10px;
  }
  .myCropper-container .myCropper-preview .myCropper-preview-1 {
    border-radius: 5px;
    overflow: hidden;
    border: 1px solid #dddee1;
    box-shadow: 3px 3px 3px #dddee1;
    img {
      width: 100%;
      height: 100%;
    }
  }
  .myCropper-container .myCropper-preview .myCropper-preview-2 {
    margin-top: 20px;
    border-radius: 5px;
    overflow: hidden;
    border: 1px solid #dddee1;
    box-shadow: 3px 3px 3px #dddee1;
    img {
      width: 100%;
      height: 100%;
    }
  }
  .myCropper-container .myCropper-preview .myCropper-preview-3 {
    margin-top: 20px;
    border-radius: 5px;
    overflow: hidden;
    border: 1px solid #dddee1;
    box-shadow: 3px 3px 3px #dddee1;
    img {
      width: 100%;
      height: 100%;
    }
  }
  // 按钮
  .myCropper-btn {
    float: left;
    margin-top: 20px;
    margin-right: 10px;
  }
</style>

BY-LucaLJX

github: lucaljx

vue-cropper实现图片裁剪 * 自定义主题 */ 阅读详情

相关推荐

vue3+vant+cropper.js实现移动端图片裁剪功能

vue3+vant+cropper.js实现移动端图片裁剪功能

jnfy的博客 1675

封装vue-cropper,图片裁剪组件

组件基本使用: 源代码: <script setup> import WuyuCropper from '@/components/wuyu-cropper/index.vue' function result(data) { console.log(data) } // 默认头像 const defaultAvatar = 'https://img.yzcdn.cn/vant/cat.jpeg' </script> <template> <wuyu

qq_58706693的博客 1319

使用ant-design-vue和vue-cropper实现裁剪图片并上传到服务器

安装vue-cropper npm install vue-cropper 在main.js里面使用 import VueCropper from 'vue-cropper' Vue.use(VueCropper) 需求: 用户上传图片后,需要裁剪,并保留,上传到服务器 思路: 点击上传,从本地选择图片文件 选择文件后弹出模态框(将选择的图片传递过去) 模态框作为裁剪图片的容器 进行裁剪 获取...

年轻人 2985

CropperJS中文文档(翻译自Cropper.js原英文文档)

Cropper.js JavaScript 图片裁剪工具 官网 Photo Editor - Cropper.js的高级示例。 jquery-cropper - Cropper.js 的 jQuery 插件包装器。 A schematic diagram for data’s properties 目录 快速上手 配置 方法 事件 无冲突 支持的浏览器 相关项目 快速上手 npm安装 npm install cropperjs CDN: <link href="/path/to/cro

简廉的博客 1万+

golang 线上事故

golang 线上事故 最近公司要做大促的一些活动。并且单量,qps持续上涨。之前使用的是django python 语言做的一个服务端。目前已经部署的国家里面最多的国家会有300+个实例。大促期间还可能会增加一个实例数。这么多的实例部署,回滚的时间都会特变长,除了问题也不好定位。并且如此多的一个机器,连接数* 实例数也会导致DB等其他服务扛不住这么大的并发。所以决定上go服务解决性能问题。 ...

lcf枫的博客 1537

Signoff Criteria --- ocv/aocv/pocv之AOCV介绍

Advanced on chip variation,相比较于OCV来说,对于悲观度的去除很有效。相比较与ocv对于整个design中的lauch/capture path设置统一的derate值,aocv通过将cell derate值与cell的逻辑深度以及实际的位置结合起来进行derate值的设定。那么这种derate如何能够设置到具体的cell呢,其实是我们在跑STA时候会读入相关的aocv lib file,里面有专门对相关的cell进行的aocv derate值的描述。> table: \

sinat_27691203的博客 7854

cropperjs的简单使用

前言 最近发现了cropperjs,可以用于裁剪图片,特点来踩一下坑。

weixin_41897680的博客 1万+

智能车‘大脑’的诞生:揭秘电磁循迹代码背后的控制论与系统思维

本文深入探讨智能车电磁循迹系统的核心架构与控制原理,揭示了其作为精密闭环系统如何通过模块化设计、信号处理、PID控制算法及电机驱动实现自主导航。重点分析了电磁信号采集与处理流程框架,为开发者提供从理论到实践的全面指南。

arduino9maker的博客 531

javaScript:cropperjs是一款非常强大却又简单的图片裁剪工具

cropperjs是一款非常强大却又简单的图片裁剪工具,它可以进行非常灵活的配置,支持手机端使用,支持包括IE9以上的现代浏览器。(关键是使用方法简单,几行代码就可以搞定)

砥砺前行的博客 3342

【AI蛋白预测实战】零门槛在Colab上运行AlphaFold2全流程解析

本文为零基础用户提供了在谷歌Colab平台上运行AlphaFold2进行蛋白质结构预测的完整实战指南。通过ColabFold项目,用户无需本地高性能硬件,即可免费利用云端GPU完成从序列输入到3D结构生成和结果可视化的全流程,大幅降低了AI蛋白预测的技术门槛。

mqtt6iot的博客 912

重访时间与覆盖分析的stk操作

1.打开stk 2.创建一个新的场景,命名为Test,选择地球为场景星球,若为金星,可在Central Body里选择Venus(金星自转周期慢,自转周期243天,卫星轨道变化不明显)(其中start stop时间可设置长一些) 3.插入一个AreaTarget或者place,以AreaTarget为例 选择Pattern,Add三个点(用法可见前面的博客,有时候编程的代码也可以帮助理解stk的操作) 4.插入Satellite,选择Orbit Wizard(若想设置卫星的六根数也可

weixin_42664107的博客 1万+

【cropperjs】优秀、优雅的前端图片裁剪库

cropperjs组件 图片处理库

此人太懒,没有任何简介 6004

低成本实现webhook接收端[python]

Webook本质上也是API,只不过是反向调用,即前端不主动发送请求,完全由后端推送。简单来说,Webhook是一个接受HTTP POST或是GET,PUT,DELETE的URL,一个实现了Webhook的API提供商就是在当事件发生的时候会向配置的URL发送信息,与请求-响应式不同,使用Webhook可以实时接收到变化。Ps:Webhook可能会发出大量的请求,确保接受的URL不被泄露或者应用能及时处理这些请求。

锡城小凯的博客 1万+

php在线拍照裁切,基于cropper.js封装vue实现在线图片裁剪组件的功能

这篇文章主要介绍了基于cropper.js封装vue实现在线图片裁剪组件功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下效果图如下所示,github:demo下载cropper.jsgithub:cropper.js官网(demo)cropper.js 安装npm或bower安装npm install cropper# orbower install cropperclone下载:下载地址g...

weixin_33513218的博客 402

基于Solidworks的三维光路结构示意图绘制实例演示-技术细节

基于Solidworks的三维光路结构示意图绘制实例演示-技术细节

简单光学 1万+

看懂 SAP S/4HANA 产品主数据里的 GTIN:一串号码背后的全球商品识别与业务协同

SAP S/4HANA中的GTIN管理是企业供应链运营的关键环节。本文深入解析GTIN的业务内涵及其在SAP系统中的实现方式:1) GTIN是全球通用的商品标识码,不同于企业内部物料编码;2) SAP主数据中GTIN与计量单位强绑定,需为不同包装层级维护独立GTIN;3) 同一产品可能因渠道、供应商差异存在多个GTIN;4) GTIN贯穿零售POS、仓储管理、EDI订单等核心业务流程;5) 通过典型案例说明错误维护GTIN将导致收银异常、仓库作业低效等运营问题。文章强调GTIN管理需结合包装层级、计量单位等

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1433

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

史上最全基于vue的图片裁剪vue-cropper使用 基于vue的图片裁剪vue-cropper 新的需求 vue-cropper官网 代码拷贝 最后 基于vue的图片裁剪vue-cropper 最近小编好久没有写博客了,今天发现突然涨了好几个粉,特别的开心,为了回馈大家,我今天准备了一点点小小的心意,最近工作实在太忙,难得抽空更博了,不过最近小编会快马加鞭努力更博的。 新的需求 最近小编遇到一个图片裁剪的需求,对于一个前端小白的我来说,搞这些花里胡哨的东西,走了很多弯路,各种百度,改了又改,

m0_67401935的博客 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Vue3 + Cropper.js 实现高质量图片裁剪组件:从原理到实战

Props:接收父组件传递的图片地址(imgSrc)、弹窗显示状态()、裁剪比例()与裁剪区域高度(Emit:向父组件传递裁剪后的图片 URL(newImgUrl)、更新弹窗显示状态()与错误信息(error内部状态:管理 Cropper 实例(CROPPER)、图片加载状态(imgLoaded)、错误信息()、初始化锁()与裁剪器就绪状态(// 父组件传参aspectRatio: { type: Number, default: NaN }, // NaN表示自由比例});

weixin_43699654的博客 2162

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Vue 使用 Cropper.js 实现图片裁剪功能

图片裁剪功能无论是用户头像的裁剪,还是图片内容的精确调整,都成为了提升用户体验的关键一环。Vue.js 结合 Cropper.js 这一功能丰富的图片裁剪库,可以轻松实现高效、直观的图片裁剪功能。本文将详细介绍如何在 Vue.js 项目中集成并使用 Cropper.js,实现一个强大的图片裁剪组件。通过本文的详细讲解,您应该已经掌握了如何在 Vue.js 项目中集成并使用 Cropper.js 实现功能强大的图片裁剪组件。

乐闻世界 2824

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

vue图片裁剪:使用vue-cropper做图片裁剪

文章目录一、安装二、图片裁剪三、将截图框回显到原图上 由于项目需要,需要做图片裁剪。之前的项目已经由cropper.js实现过,因为这次使用的是vue,所以采用了vue-cropper这个组件,使用起来很简单,但是坑也很多。 一、安装 npm install vue-cropper main.js import VueCropper from 'vue-cropper' Vue.use(VueCropper) 二、图片裁剪 引入VueCropper组件,并设置相关的属性。 <div s

没事学点AI小知识 4807

基于vue的图片裁剪组件vue-cropper,配合element-ui组件上传

github地址:https://github.com/xyxiao001/vue-cropper 安装:npm install vue-cropper -S

xjf106的博客 3683

vue+图片裁剪vue-cropper以及api

前言: 因为项目需要,需要实现一个上传完图片,对图片进行二次处理的需求,就使用了vue-cropper来实现这个功能,总的来说还是感觉非常不错的软件,这里分享下我的使用方法,以及vue-cropper的api(见最下) 实现效果: 实现步骤: 步骤一:项目中安装 vue-cropper npm install vue-cropper 步骤二:在main.js中注册...

浩星 4468

使用vue-cropper实现图片裁剪,放大缩小,实时预览等

1、安装 npm install vue-cropper -S 2、main.js引用 import VueCropper from 'vue-cropper' import Antd from 'ant-design-vue'; import 'ant-design-vue/dist/antd.css'; Vue.config.productionTip = false Vue.use(Antd) Vue.use(VueCropper) 3、主要文件 <template> <

weixin_46115860的博客 1万+

vue-cropper:图片裁剪

官方文档:https://www.npmjs.com/package/vue-cropper 安装:npm install vue-cropper

qq_41985405的博客 1881

vue+element 学习之路(九)vue-cropper 图片裁剪上传

今天在做头像上传需求的时候 发现了一个巨好用的图片裁剪插件,捣鼓了一天踩了不少坑终于取得了“阶段性”的成功,嘿嘿嘿。下面就来总结分享给大家 需求: 用户上传一张图片,进行裁剪功能,裁剪时可以预览,最后以裁剪的图片作为头像使用 思路: 思路步骤其实很简单 1.点击上传头像按钮,打开图片裁剪弹出层。 2.选择图片后,按头像预览进行调整。 3.点击确定,开始裁剪图片,发送请求到后端,并将裁剪的图片上传...

weixin_39327044的博客 6506

vue图片裁剪组件

vue图片裁剪组件 简介 图片裁剪组件同上传图片组件一样,用的较多,这里主要用的是vue-cropper这个包,功能支持裁剪图片文件类型检验,图片大小检验,图片分辨率校验以及图片比列校验等功能。 主要依赖说明 (先安装,步骤略) { "element-ui": "2.11.1", "vue": "^2.6.10", "vue-router": "^3.0.1", ...

前端开发者 1万+
上一篇: pm2--node.js服务管理工具使用说明
下一篇: bing Map 在vue项目中的使用
2B_LIS
博客等级 码龄14年 6粉丝 11原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值