IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue中使用图片裁剪Vue-cropper -> 正文阅读

[JavaScript知识库]Vue中使用图片裁剪Vue-cropper

1. 安装插件

npm install vue-cropper --save

2. 引入插件

// main.js
import VueCropper from 'vue-cropper'
Vue.use(VueCropper)

3. 使用插件?

(1). 下面代码中的?selectImage 事件是加在所选择的图片上面的,参数为选择图片的地址;
(2).?下面代码中的
imgUrl 为最终裁剪的图片提交给服务端保存后的图片链接地址。


<template>
    <div>
        <el-dialog title="图片剪裁" :visible.sync="dialogVisible" append-to-body @close="closeCropper">
            <div class="cropper-content">
                <div class="cropper" style="text-align:center">
                <vueCropper
                    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"
                ></vueCropper>
                </div>
            </div>
            <div slot="footer" class="dialog-footer">
                <el-button @click="closeCropper">取 消</el-button>
                <el-button type="primary" @click="finish" :loading="loading">确认</el-button>
            </div>
        </el-dialog>
    </div>
</template>

<script>
export default {
    name: "cropper",
    data() {
        return {
            // 图片裁剪
            dialogVisible: false,
            // 裁剪配置
            option: {
                img: '',                // 裁剪图片的地址
                info: true,             // 裁剪框的大小信息
                outputSize: 0.8,        // 裁剪生成图片的质量
                outputType: 'jpeg',     // 裁剪生成图片的格式
                canScale: false,        // 图片是否允许滚轮缩放
                autoCrop: true,         // 是否默认生成截图框
                // autoCropWidth: 300,  // 默认生成截图框宽度
                // autoCropHeight: 200, // 默认生成截图框高度
                fixedBox: false,        // 固定截图框大小不允许改变
                fixed: false,           // 是否开启截图框宽高固定比例
                fixedNumber: [1, 1],    // 截图框的宽高比例
                full: true,             // 是否输出原图比例的截图
                canMoveBox: true,       // 截图框能否拖动
                original: false,        // 上传图片按照原始比例渲染
                centerBox: true,        // 截图框是否被限制在图片里面
                infoTrue: true          // true 为展示真实输出图片宽高 false 展示看到的截图框宽高
            },
            // 防止重复提交
            loading:false,
            // 裁剪过后的图片
            imgUrl:""

        };
    },

    methods: {
        // 选择图片(加在图片上的事件,点击图片,获取图片的链接地址)
        selectImage(src){
            // 设置图片Base64
            this.setImageBase64(src, (base64) => {
                this.option.img = base64;
                this.dialogVisible = true;
            });
        },

        // 设置图片Base64
        setImageBase64(src, callback) {
            let image = new Image();
            // 支持跨域
            image.crossOrigin = "anonymous";
            // 处理缓存
            image.src = src + '?v=' + Math.random();
            // 动态生成
            image.onload = function () {
                let canvas = document.createElement("canvas");
                canvas.width = image.width;
                canvas.height = image.height;
                let ctx = canvas.getContext("2d");
                ctx.drawImage(image, 0, 0, image.width, image.height);
                let result = canvas.toDataURL("image/png");
                callback && callback(result);
            }
        },
 
        // 确认裁剪
        finish() {
            this.$refs.cropper.getCropData((data) => { 
                this.loading = true;
                let formData = new FormData();
                // 以表单的形式将数据传给服务端
                formData.append("imgBase64", data);
                // 此处上传的地址为模拟地址
                this.$http.post("saveBase64",formData).then((result)=>{
                    if(result.code == 10000){

                        this.loading = false;
                        this.dialogVisible = false;

                        // 获取服务端返回的裁剪图片地址
                        this.imgUrl = result.url;
                    }
                });
            })
        },
        // 关闭裁剪
        closeCropper(){
            this.dialogVisible = false;
        }
    }  
};

</script>

<style lang="scss" scoped>
// 图片裁剪样式
.cropper-content {
    .cropper {
        width: auto;
        height: 300px;
    }
}
</style>

4. 效果示例

参考:GitHub - aiguangyuan/vue-cropper: A simple picture clipping plugin for vue

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-09 19:23:29  更:2021-11-09 19:24:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/13 11:13:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码