vue+element实现图片上传及裁剪功能

作者:沫熙瑾年 时间:2024-05-29 22:22:12 

本文实例为大家分享了vue+element实现图片上传及裁剪的具体代码,供大家参考,具体内容如下

随便写的一个小demo 功能是没有任何问题 可能里面会有一些小细节没有优化 

1 、安装 vue-cropper


npm install vue-cropper

2、组件内使用


import { VueCropper } from 'vue-cropper'
components: {
VueCropper,
},

具体可见官网

demo


<template>
 <div>
   <h1>图片上传</h1>
   <div>
     <el-upload
       class="avatar-uploader"
       action="https://jsonplaceholder.typicode.com/posts/"
       :show-file-list="false"
       :on-success="handleAvatarSuccess"
       :before-upload="beforeAvatarUpload"
     >
     <img v-if="imageUrl" :src="imageUrl" class="avatar">
     <i v-else class="el-icon-plus avatar-uploader-icon"></i>
     </el-upload>
   </div>
   <el-dialog title="图片剪裁" :visible.sync="dialogVisible" append-to-body>
     <div class="cropper-content">
       <div class="cropper" style="text-align:center">
         <vueCropper
           ref="cropper"
           :img="option.img"
           :outputSize="option.outputSize"
           :outputType="option.outputType"
           :info="option.info"
           :canScale="option.canScale"
           :autoCrop="option.autoCrop"
           :autoCropWidth="option.autoCropWidth"
           :autoCropHeight="option.autoCropHeight"
           :fixed="option.fixed"
           :fixedBox="option.fixedBox"
           :fixedNumber="option.fixedNumber"
         ></vueCropper>
       </div>
     </div>
     <div slot="footer" class="dialog-footer">
       <el-button @click="dialogVisible = false">取 消</el-button>
       <el-button type="primary" @click="finish" :loading="loading">确认</el-button>
     </div>
   </el-dialog>
 </div>
</template>
<script>
import {VueCropper} from 'vue-cropper'
export default {
 components: {
   VueCropper
 },
 data(){
   return{
     imageUrl: '',
     dialogVisible: false,
     // 裁剪组件的基础配置option
     option: {
       img: '', // 裁剪图片的地址
       info: true, // 裁剪框的大小信息
       outputSize: 0.8, // 裁剪生成图片的质量
       outputType: 'jpeg', // 裁剪生成图片的格式
       canScale: false, // 图片是否允许滚轮缩放
       autoCrop: true, // 是否默认生成截图框
       autoCropWidth: 100, // 默认生成截图框宽度
       autoCropHeight: 100, // 默认生成截图框高度
       fixedBox: true, // 固定截图框大小 不允许改变
       fixed: true, // 是否开启截图框宽高固定比例
       fixedNumber: [1, 1], // 截图框的宽高比例
       full: true, // 是否输出原图比例的截图
       canMoveBox: false, // 截图框能否拖动
       original: false, // 上传图片按照原始比例渲染
       centerBox: false, // 截图框是否被限制在图片里面
       infoTrue: true, // true 为展示真实输出图片宽高 false 展示看到的截图框宽高
       canMove:true,
     },
     picsList: [], //页面显示的数组
     // 防止重复提交
     loading: false,
     fileinfo:{}
   }
 },
 methods: {
  handleAvatarSuccess(res, file,fileList) {
   //上传成功后将图片地址赋值给裁剪框显示图片
   this.$nextTick(() => {
     this.option.img = URL.createObjectURL(file.raw);
     this.fileinfo = res
     this.dialogVisible = true
   })
  },
  beforeAvatarUpload(file) {
   const isJPG = file.type === 'image/jpeg'||file.type==='image/png';
   const isLt2M = file.size / 1024 / 1024 < 2;

if (!isJPG) {
    this.$message.error('上传头像图片只能是 JPG 格式!');
   }
   if (!isLt2M) {
    this.$message.error('上传头像图片大小不能超过 2MB!');
   }
   return isJPG && isLt2M;
  },
   finish() {
     this.$refs.cropper.getCropBlob((data) => {
       var fileName = 'goods' + this.fileinfo.uid
       this.loading = true
       //上传阿里云服务器
       //请求
     })
   }
 }
}
</script>
<style scoped>
 .avatar-uploader{
   background:red!important;
   width:150px;height:150px;
   text-align: center;
   line-height: 150px;
 }
 .el-icon-plus{
   width:150px;height:150px;font-size:30px;
 }
 .cropper-content{
   width:500px;height:500px;background: pink;
 }
 .cropper{
   width:500px;
   height:500px;
   background: yellow;
 }
</style>

关于vue.js组件的教程,请大家点击专题vue.js组件学习教程进行学习。

来源:https://blog.csdn.net/xy19950125/article/details/105562295

标签:vue,element,上传,裁剪
0
投稿

猜你喜欢

  • 利用tkinter改变下拉列表(Combobox)的选项值

    2023-07-20 03:10:37
  • python百行代码自制电脑端网速悬浮窗的实现

    2023-02-03 21:52:57
  • Pandas之Fillna填充缺失数据的方法

    2022-11-17 20:17:12
  • 解读HTML:命名空间与字符编码

    2008-12-10 14:03:00
  • Python检测字符串中是否包含某字符集合中的字符

    2023-09-08 10:44:30
  • Python下载ts文件视频且合并的操作方法

    2021-11-15 15:40:19
  • Go语言fsnotify接口实现监测文件修改

    2024-05-13 10:45:07
  • mysql容器之间的replication配置实例详解

    2024-01-17 23:48:01
  • python3 Scrapy爬虫框架ip代理配置的方法

    2021-03-01 00:39:11
  • Django项目中用JS实现加载子页面并传值的方法

    2022-07-05 00:18:28
  • python enumerate内置函数用法总结

    2023-06-24 05:54:24
  • Python Matplotlib绘制动画的代码详解

    2022-08-19 20:21:03
  • Python进制转换用法详解

    2021-08-20 15:18:40
  • Oracle 数据库操作类

    2009-08-12 12:06:00
  • python适合人工智能的理由和优势

    2021-08-10 11:01:12
  • 深入浅出Python中三个图像增强库的使用

    2021-12-08 08:33:55
  • PyTorch 使用torchvision进行图片数据增广

    2023-06-19 23:09:10
  • python实现不同电脑之间视频传输功能

    2021-01-07 00:03:40
  • JavaScript实现网页动态生成表格

    2024-04-16 09:24:00
  • MySQL Server层四个日志的实现

    2024-01-21 11:16:58
  • asp之家 网络编程 m.aspxhome.com