Vue实现裁切图片功能

 更新时间:2022年04月22日 17:22:54   作者:nicepainkiller  
这篇文章主要为大家详细介绍了Vue实现裁切图片功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Vue实现裁切图片的具体代码,供大家参考,具体内容如下

项目需求做一个身份证的裁切功能

原生开发的话,这种功能挺容易实现的

Web的没有做过相关功能,百度了一下  vue-cropper  在 VUE是使用还是蛮方便的

1)、安装 vue-cropper 

npm install vue-cropper

2)、编写 .VUE 文件 cropper.vue 应为项目本身使用 mui 

<template>
    <div>
        <div class="mui-fullscreen">
 
            <div class="top" style="height:1.63rem;background:white;" v-on:click="onBack()">
                <img src="../assets/img/payMent/fanhui@2x.png" style="width:0.17rem;margin-left: 0.21rem; margin-top: 0.89rem">
                <p style="position: absolute; margin-left: 2.9rem;top: 0.8rem; font-family:PingFang-SC-Medium; color: black;  font-size: 0.36rem;">实名认证</p>
            </div>
 
            <div style="position: absolute; width: 100%;top:1.63rem;bottom:1.2rem ;background:#F2F2F2 ;">
                <!-- <img id="image" :src="image" style="width: 100%; width: 100%;"> -->
                <img src="../assets/img/lobby/youxuanzhuan.png" style="width: 0.5rem; position: absolute; top: 0.5rem; left: 0.5rem; z-index: 2;"
                 v-on:click="rotateLeft()" />
                <img src="../assets/img/lobby/zuoxuanzhuan.png" style="width: 0.5rem; position: absolute; top: 0.5rem; right: 0.5rem; z-index: 2;"
                 v-on:click="rotateRight()" />
 
 
 
                <div class="cropperContent">
 
                    <vue-cropper ref="cropper" :img="option.img" :outputSize="option.size" :outputType="option.outputType" :info="true"
                     :full="option.full" :canMove="option.canMove" :canMoveBox="option.canMoveBox" :original="option.original"
                     :autoCrop="option.autoCrop" :fixed="option.fixed" :fixedNumber="option.fixedNumber" :centerBox="option.centerBox"
                     :infoTrue="option.infoTrue" :fixedBox="option.fixedBox" @realTime="realTime"></vue-cropper>
 
 
 
                </div>
 
                <!--                 <div style="height: 2rem;width: 2rem; background: greenyellow; position: absolute; top: 5rem;">
                    <img :src="preview" style="height: 2rem;width: 2rem;" />
                </div> -->
 
            </div>
 
 
            <div class="buttom" style="background: #618FF5; height:1.2rem;width:100%; bottom: 0rem; position:absolute;#F2F2F2"
             v-on:click="onSelect()">
                <p style="position: absolute; margin-left: 3.4rem;top: 0.3rem; font-family:PingFang-SC-Medium; color: white;  font-size: 0.36rem;">确定</p>
            </div>
 
            <!--             <img :src="preview" style="height: 1rem;" /> -->
 
        </div>
    </div>
</template>
 
<script>
    import {
        VueCropper
    } from 'vue-cropper'
    export default {
        data() {
            return {
                target: 0,
                cropperHelp: null,
                preview: null,
                //裁剪组件的基础配置option
                option: {
                    img: '', // 裁剪图片的地址
                    info: true, // 裁剪框的大小信息
                    outputSize: 1, // 裁剪生成图片的质量
                    outputType: 'jpeg', // 裁剪生成图片的格式
                    canScale: false, // 图片是否允许滚轮缩放
                    autoCrop: true, // 是否默认生成截图框
                    autoCropWidth: 800, // 默认生成截图框宽度
                    autoCropHeight: 500, // 默认生成截图框高度
                    fixedBox: false, // 固定截图框大小 不允许改变
                    fixed: true, // 是否开启截图框宽高固定比例
                    fixedNumber: [16, 10], // 截图框的宽高比例
                    full: false, // 是否输出原图比例的截图
                    canMoveBox: true, // 截图框能否拖动
                    original: false, // 上传图片按照原始比例渲染
                    centerBox: true, // 截图框是否被限制在图片里面
                    infoTrue: true // true 为展示真实输出图片宽高 false 展示看到的截图框宽高
                },
            }
        },
        components: {
            VueCropper
        },
        methods: {
            //放大/缩小
            changeScale(num) {
                console.log('changeScale')
                num = num || 1;
                this.$refs.cropper.changeScale(num);
            },
            //坐旋转
            rotateLeft() {
                console.log('rotateLeft')
                this.$refs.cropper.rotateLeft();
            },
            //右旋转
            rotateRight() {
                console.log('rotateRight')
                this.$refs.cropper.rotateRight();
            },
            // 实时预览函数
            realTime(data) {
                //this.previews = data
            },
            imgLoad(msg) {
                console.log(msg)
            },
            cropImage() {
 
            },
 
 
            onSelect() {
                
                this.$refs.cropper.getCropBlob((data) => {
                    //console.log("data===>",data)
                    var img = window.URL.createObjectURL(data);
                    this.$emit("onCutingResoult", {
                        img: img,
                        target: this.target
                    })
                })
            },
 
            onReset(param) {
                this.target = param.target
                this.option.img = param.url
                this.preview = param.url
            },
            onBack() {
                this.$emit("onCutingBack")
            }
        }
 
    }
</script>
 
<style scoped>
    .mui-fullscreen {
        background: white;
    }
 
    .cropperContent {
        width: 100%;
        height: 100%;
    }
 
    /*     .mui-fullscreen {
        background: #F2F2F2;
        top: 0rem;
        bottom: 0rem;
    } */
</style>

基本上,放里面就能使用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Vue中使用Element的Table组件实现嵌套表格

    Vue中使用Element的Table组件实现嵌套表格

    本文主要介绍了Vue中使用Element的Table组件实现嵌套表格,通过type="expand"设置了一个展开按钮,点击该按钮会显示与当前行关联的子表格内容,感兴趣的可以了解一下
    2024-01-01
  • Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控

    Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控

    这篇文章主要介绍了Vue.js@2.6.10更新内置错误处机制,Fundebug同步支持相应错误监控 ,需要的朋友可以参考下
    2019-05-05
  • Vue3全局配置axios的两种方式总结

    Vue3全局配置axios的两种方式总结

    在实际项目开发中,几乎每个组件中都会用到 axios 发起数据请求,下面这篇文章主要给大家总结介绍了关于Vue3全局配置axios的两种方式,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • 深度解析 Vue3 的响应式机制

    深度解析 Vue3 的响应式机制

    这篇文章主要介绍了深度解析 Vue3 的响应式机制,今天就带大家深入了解一下 Vue 3 的响应式机制,相信学完今天的内容,会对响应式机制有更深地体会;文章会结合代码示例,帮大家掌握响应式机制的进阶用法,让我们正式开始学习吧
    2022-09-09
  • vue ElementUI实现异步加载树

    vue ElementUI实现异步加载树

    这篇文章主要为大家详细介绍了vue ElementUI实现异步加载树,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Vue如何实现iframe的上一步、下一步操作

    Vue如何实现iframe的上一步、下一步操作

    这篇文章主要介绍了Vue如何实现iframe的上一步、下一步操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • vue elementui简易侧拉栏的使用小结

    vue elementui简易侧拉栏的使用小结

    这篇文章主要介绍了vue elementui简易侧拉栏的使用,增加了侧拉栏,目的是可以选择多条数据展示数据,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • Vue框架和前后端开发详解

    Vue框架和前后端开发详解

    这篇文章主要为大家介绍了Vue框架和前后端开发,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • fullcalendar日程管理插件月份切换回调处理方案

    fullcalendar日程管理插件月份切换回调处理方案

    这篇文章主要为大家介绍了fullcalendar日程管理插件月份切换回调处理的方案示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作

    vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作

    这篇文章主要介绍了vue v-for 点击当前行,获取当前行数据及event当前事件对象的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09

最新评论