当前位置:首页 > VUE

vue实现图片裁剪上传

2026-02-21 10:03:15VUE

Vue 实现图片裁剪上传的方法

使用 vue-cropper 库

安装 vue-cropper 库:

npm install vue-cropperjs

在组件中引入并使用:

vue实现图片裁剪上传

<template>
  <div>
    <input type="file" @change="uploadImg" accept="image/*">
    <vue-cropper
      ref="cropper"
      :img="imgSrc"
      :autoCrop="true"
      :autoCropWidth="200"
      :autoCropHeight="200"
    ></vue-cropper>
    <button @click="cropImg">裁剪</button>
  </div>
</template>

<script>
import VueCropper from 'vue-cropperjs';
import 'cropperjs/dist/cropper.css';

export default {
  components: { VueCropper },
  data() {
    return {
      imgSrc: ''
    };
  },
  methods: {
    uploadImg(e) {
      const file = e.target.files[0];
      if (!file) return;
      const reader = new FileReader();
      reader.onload = (event) => {
        this.imgSrc = event.target.result;
      };
      reader.readAsDataURL(file);
    },
    cropImg() {
      this.$refs.cropper.getCroppedCanvas().toBlob((blob) => {
        const formData = new FormData();
        formData.append('file', blob, 'cropped.png');
        // 上传 formData 到服务器
      });
    }
  }
};
</script>

使用 cropperjs 直接集成

安装 cropperjs:

vue实现图片裁剪上传

npm install cropperjs

在组件中使用:

<template>
  <div>
    <input type="file" @change="uploadImg" accept="image/*">
    <img ref="image" src="">
    <button @click="cropImg">裁剪</button>
  </div>
</template>

<script>
import Cropper from 'cropperjs';
import 'cropperjs/dist/cropper.css';

export default {
  data() {
    return {
      cropper: null,
      imgFile: null
    };
  },
  mounted() {
    this.cropper = new Cropper(this.$refs.image, {
      aspectRatio: 1,
      viewMode: 1
    });
  },
  methods: {
    uploadImg(e) {
      const file = e.target.files[0];
      if (!file) return;
      const reader = new FileReader();
      reader.onload = (event) => {
        this.$refs.image.src = event.target.result;
        this.cropper.replace(event.target.result);
      };
      reader.readAsDataURL(file);
      this.imgFile = file;
    },
    cropImg() {
      this.cropper.getCroppedCanvas().toBlob((blob) => {
        const formData = new FormData();
        formData.append('file', blob, 'cropped.png');
        // 上传 formData 到服务器
      });
    }
  }
};
</script>

使用 Element UI 的 Upload 组件

结合 Element UI 的 Upload 和 cropperjs:

<template>
  <el-upload
    action="#"
    :auto-upload="false"
    :on-change="handleChange"
    :show-file-list="false"
  >
    <el-button>选择图片</el-button>
  </el-upload>
  <img ref="image" src="">
  <el-button @click="cropImg">裁剪并上传</el-button>
</template>

<script>
import Cropper from 'cropperjs';
import 'cropperjs/dist/cropper.css';

export default {
  data() {
    return {
      cropper: null
    };
  },
  methods: {
    handleChange(file) {
      const reader = new FileReader();
      reader.onload = (event) => {
        this.$refs.image.src = event.target.result;
        if (this.cropper) {
          this.cropper.destroy();
        }
        this.cropper = new Cropper(this.$refs.image, {
          aspectRatio: 1
        });
      };
      reader.readAsDataURL(file.raw);
    },
    cropImg() {
      this.cropper.getCroppedCanvas().toBlob((blob) => {
        const formData = new FormData();
        formData.append('file', blob, 'cropped.png');
        // 上传 formData 到服务器
      });
    }
  }
};
</script>

注意事项

  • 图片上传需要后端接口支持,通常使用 FormData 格式上传。
  • 裁剪后的图片可以通过 toBlobtoDataURL 方法获取。
  • 移动端可能需要额外处理手势和缩放问题。

标签: 上传图片
分享给朋友:

相关文章

vue实现图片循环

vue实现图片循环

实现图片循环展示 在Vue中实现图片循环展示可以通过v-for指令结合数组数据完成。以下是具体实现方式: 基础循环展示 准备图片数据数组,使用v-for渲染图片列表: <template&g…

php 实现上传视频

php 实现上传视频

上传视频的基本流程 在PHP中实现视频上传功能需要处理文件接收、验证、存储等步骤。核心是通过$_FILES超全局变量获取上传的文件信息,结合move_uploaded_file函数完成存储。 创建H…

js实现图片滚动

js实现图片滚动

图片滚动的实现方法 使用CSS动画实现 通过CSS的animation和@keyframes可以实现简单的图片滚动效果。这种方法适合静态图片的无缝循环滚动。 <style> .scr…

jquery图片切换

jquery图片切换

jQuery图片切换的实现方法 通过jQuery实现图片切换功能有多种方式,以下是几种常见的实现方法: 基础淡入淡出效果 $(document).ready(function(){ let…

vue实现图片剪切

vue实现图片剪切

Vue 实现图片裁剪的方法 在 Vue 中实现图片裁剪功能,可以通过以下两种常见方式完成: 使用第三方库 cropperjs 安装 cropperjs 库: npm install cro…

vue实现图片拖动

vue实现图片拖动

Vue 实现图片拖动的步骤 使用 HTML5 拖放 API 在 Vue 中实现图片拖动可以利用 HTML5 的拖放 API。通过 draggable 属性设置元素可拖动,监听 dragstart、dr…