vue-cropper(图片裁剪插件)

2023-11-13

描述:vue-cropper是一个非常好用的图片裁剪插件,可以拿到裁剪后图片的base64地址或者blob地址

一.安装

# npm 安装
npm install vue-cropper
// npm安装或yarn安装,根据喜好2选一即可
# yarn 安装
yarn add vue-cropper

二.引入

  ......
  import { VueCropper } from 'vue-cropper'
  ......
    export default {
    components: {
      VueCropper
      }
    }

三.使用

template中使用 <vue-cropper />并配置一些属性,如下:

 <vue-cropper
    ref="cropper"
    :img="option.img"
    :output-size="option.size"
    :output-type="option.outputType"
    :info="true"
    :full="option.full"
    :can-move="option.canMove"
    :can-move-box="option.canMoveBox"
    :original="option.original"
    :auto-crop="option.autoCrop"
    :fixed="option.fixed"
    :fixed-number="option.fixedNumber"
    :center-box="option.centerBox"
    :info-true="option.infoTrue"
    :fixed-box="option.fixedBox"
 />

在data中配置这些属性,可以根据需要变更

data() {
      return {
        option:    {
          img:         '(此处你可根据你的需求动态获取或固定图片路径)', // 裁剪图片的地址
          info:        true, // 裁剪框的大小信息
          outputSize:  1, // 裁剪生成图片的质量
          outputType:  'jpeg', // 裁剪生成图片的格式
          canScale:    false, // 图片是否允许滚轮缩放
          autoCrop:    true, // 是否默认生成截图框
          fixedBox:    true, // 固定截图框大小 不允许改变
          fixed:       true, // 是否开启截图框宽高固定比例
          fixedNumber: [5, 7], // 截图框的宽高比例
          full:        true, // 是否输出原图比例的截图
          canMoveBox:  false, // 截图框能否拖动
          original:    false, // 上传图片按照原始比例渲染
          centerBox:   false, // 截图框是否被限制在图片里面
          infoTrue:    true // true 为展示真实输出图片宽高 false 展示看到的截图框宽高
        },
      }
    },

获取截图内容
①获取截图的 base64 数据

this.$refs.cropper.getCropData(data => {
  // do something
  console.log(data)  
})

②获取截图的 blob 数据

this.$refs.cropper.getCropBlob(data => {
  // do something
  console.log(data)  
})

我在项目中的使用:点击确认按钮后触发submit方法,获取截图的blob地址,再转为file地址后传递给后端服务器,服务器返回在oss上面的地址(就是能拿到一个非本地的图片url,一般可能不需要或者根据要求有别的处理),拿到这个地址后向后端发请求,在服务器保存这个图片。(不同项目使用可能不太相同,但一般应该都需要拿到图片地址上传给后端服务器)

   submit() {
        this.$refs.cropper.getCropData((dataTemp) => {  // dataTemp保存截图的base64数据
          let file = this.dataURLtoFile(dataTemp, `${new Date().getTime()}.png`)   // 该方法为自己定义,将base64转为file格式,方便发送给服务器
          let formData = new FormData()   
          formData.append('file', file)
          request.post({   // 向后端发请求
            url:      `此处填写请求的url地址`,
            methods: 'POST',   // 请求方式
            headers: { 'Content-Type': 'application/x-www-form-urlencoded' },   // 请求头
            data:    formData,  //数据通过formData对象传递给后端服务器
          }).then((res) => {
            const { server, fileNewName } = res.data.data  // 请求后拿到的数据
            const certificate_url = `${server}/${fileNewName}`  // 两者拼接就是服务器返回的图片地址
            this.idPhoto = certificate_url  // idPhoto在data中有给初始值,这里将拿到的地址复制给idPhoto,后面再保存截图后就会在页面显示的图片就绑定这个地址
            const user_id = this.$store.state.user.userId
            // 我这里的操作为向后端发请求在服务器保存截取后的图片,idPhotoApi.idPhotoSave为另一个文件中的方法,如果有需要,可以根据需要发送自己的请求,上传图片。
            idPhotoApi.idPhotoSave({ certificate_url, user_id }).then((res) => {
              if (res.data.code === '200000') {
                this.$toast(this.$t('图片上传成功'))
              }
            })
          })
            .catch((error) => this.$toast(error))
        })
        this.show = 3    // 此处是我切换界面的时候用的,data中有定义,一般不需要
      },

	// 将base64转换为文件,dataurl为base64字符串,filename为文件名(必须带后缀名,如.jpg,.png)
	dataURLtoFile (dataurl, filename) {
  		const arr = dataurl.split(',')
  		const mime = arr[0].match(/:(.*?);/u)[1]
  		const bstr = atob(arr[1])
  		let n = bstr.length
  		const u8arr = new Uint8Array(n)
  		while (n--) {
    		u8arr[n] = bstr.charCodeAt(n)
  		}
  		const blob = new Blob([u8arr], { type: mime })
  		return new File([blob], filename, { type: mime, lastModified: new 		Date() })
	}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue-cropper(图片裁剪插件) 的相关文章

  • 如何阻止直接访问我的 JavaScript 文件?

    我使用 Minify 来缩小并缓存所有脚本请求 我只希望我的用户能够访问 JavaScript 文件的缩小版本 缩小位于www example com min我的脚本位于www example com scripts 如何阻止直接访问doc
  • 浏览器视口大小(以设备像素为单位)

    Goal 我希望 Flash 能够获得有关浏览器视口宽度和高度 以设备像素为单位 的准确信息初始化 调整大小或浏览器缩放事件时 规格 我需要将 flash 嵌入到在 chrome safari firefox 等中运行的 html 页面中
  • Vue 3 Composition API 提供/注入在单文件组件中不起作用

    我正在使用 Composition API 在 VueJS 3 中创建一个库 我实现了提供 注入 如中所述docs https v3 vuejs org guide composition api provide inject html i
  • 位置特征检测:固定

    我正在尝试找到一个脚本来检测设备是否放置position fixed元素相对于视口而不是整个文档 目前 标准桌面浏览器和 Mobile Safari 适用于 iOS 5 都是这样做的 而 Android 设备则相对于整个文档放置固定元素 我
  • 如何正确清理来自 AngularJS 控制器的无效输入的表单?

    我有一个 AngularJS 表单 其中包含 除其他字段之外 类型之一url 后者很重要 因为这会强制相应的输入成为有效的 URL 在某些条件下 例如 要关闭具有此类表单的模式对话框 我想以编程方式清除该表单 为此 我实现了方法reset基
  • 使用 Angular 指令禁用文本选择

    我正在学习 JavaScript 和 AngularJS 我想使用 Angular Directive 禁用文本选择 我有该函数的 JavaScript 代码 function clearSelection if document sele
  • .push() 将多个对象放入 JavaScript 数组中返回“未定义”

    当我将项目添加到beats数组然后console log用户时 我得到了数组中正确的项目数 但是当我检查 length 时 我总是得到 1 尝试调用索引总是会给我 未定义 如下所示 Tom beats 1 我想我错过了一些明显的东西 但这让
  • 如何在React Native Android中获取响应头?

    您好 我想在获取 POST 请求后获取响应标头 我尝试调试看看里面有什么response with console log response 我可以从以下位置获取响应机构responseData但我不知道如何获取标题 我想同时获得标题和正文
  • IntersectionObserver是否支持水平滚动观察?

    我制作了几个垂直滚动 IntersectionObserver 模块 但我对水平滚动感兴趣 根将是 div 观察目标将是 img 我想观察当 img 放大但 div 保持视口宽度时的变化 我什至不确定移动 Safari 是否会将缩放后的图片
  • React autoFocus 将光标设置为输入值的开头

    我有一个受控输入 最初显示一个值 我已将该输入设置为自动聚焦 但当我希望它出现在末尾时 光标出现在输入的开头 我知道这可能是因为自动对焦是在值之前添加的 但我不能 100 确定 在输入字段末尾完成光标初始化的最佳方法是什么 var Test
  • JavaScript 中的 Promise 有什么意义?

    一个承诺是一个 可能现在可用 或将来可用 或永远不可用的值 来源 MDN 假设我有一个想要处理图片的应用程序 图片已加载 例如在算法在后台使用它之后 或某种其他类型的延迟 现在我想检查一下图片是否可以在future 通过使用承诺 而不是回调
  • onclick 事件中未调用函数

    我想在每个 YouTube 链接的末尾添加一些 HTML 以在 litebox 中打开播放器 到目前为止 这是我的代码 document ready function var valid url new RegExp youtube com
  • LeafleteachLayer函数不会迭代所有Layer

    使用 GeoJSON 数据数组创建一些标记 getJSON GetLocationsServlet function data L geoJSON data onEachFeature onEachFeature addTo mymap G
  • 聆听 Angular 2 中的元素可见性

    我正在为我的网络应用程序使用 Bootstrap 和 Angular 2 v4 我想监听指令中的元素以了解可见性变化 我的元素有一个可以隐藏其子元素的父元素hidden sm up我需要在每次隐藏或显示时触发一个函数 div hidden
  • 用于选择特定 div 中具有特定类的锚元素的 jQuery 选择器是什么

    我有一些这样的代码 我想选择每个 a 带有类的标签status在 div 中foo div a class status a div 你可以这样做 foo find status a
  • $resource.query 返回分割字符串(字符数组)而不是字符串

    我正在使用像下面这样的 Angular resource angular module app factory data function resource var Con resource api data update method P
  • 在 iOS 7 Safari 中,如何区分通过边缘滑动与后退/前进按钮的 popstate 事件?

    在 iOS 7 Safari 中 现在有两种后退 前进导航方式 使用底部的传统后退 前进按钮箭头或从屏幕边缘滑动 我正在使用动画在 ajax 应用程序中的页面之间进行转换 但如果用户通过边缘滑动进行导航 我不想触发该转换 因为这本身就是一个
  • Flot 库将 y 轴设置为最小值 0 和最大值 24

    如何将 y 轴设置在 0 到 24 的范围内 这是我的代码 j plot j placeholder d1 xaxis mode time min new Date 2010 11 01 getTime max new Date 2011
  • 将数组从 jquery ajax 传递到代码后面

    我必须将二维数组传递给在asp net网页代码后面编写的页面方法我有一个变量objList作为二维数组 我使用以下代码来实现此目的 但没有成功 并且未调用页面方法 脚本语言 function BindTable objList ajax u
  • 没有输入的 jQuery 日期选择器

    我有一个相当复杂的网络应用程序 我想向其中添加一些日期选择 UI 我遇到的问题是我无法从文档中弄清楚如何真正控制日期选择器的出现方式和时间 不涉及任何表单元素 不 我不会添加秘密表单字段 因此简单的开箱即用方法根本行不通 我希望有人可以提供

随机推荐