当前位置:首页 > VUE

vue实现图片裁剪上传

2026-02-21 10:03:15VUE

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

使用 vue-cropper 库

安装 vue-cropper 库:

npm install vue-cropperjs

在组件中引入并使用:

<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:

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实现图片裁剪上传

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

相关文章

css3手工制作图片

css3手工制作图片

使用CSS3手工制作图片 CSS3可以通过各种属性如box-shadow、border-radius、gradient等来手工绘制简单的图形或图片效果。以下是几种常见的方法: 绘制圆形 通过bor…

H5图片实现地图

H5图片实现地图

实现H5图片地图的方法 在H5中实现图片地图功能,可以通过以下方式完成。图片地图允许用户在图片的特定区域点击,触发不同的交互效果。 使用HTML的<map>和<area>标…

vue实现上传头像

vue实现上传头像

使用 Vue 实现上传头像 前端实现 创建一个文件上传组件,使用 <input type="file"> 元素选择文件,并通过 FileReader 预览图片。 <template…

react如何引用图片

react如何引用图片

在React中引用图片的方法 使用import直接引入图片 在React组件中,可以通过import语句将图片作为模块引入。这种方式适合在组件内部使用图片,Webpack会处理图片的路径和打包。…

vue实现添加图片

vue实现添加图片

使用 <input type="file"> 上传图片 通过 HTML 原生文件输入框获取用户选择的图片文件,结合 Vue 的 v-on 监听文件变化事件。 <templat…

vue实现图片滚动

vue实现图片滚动

实现图片滚动的 Vue 组件 使用 Vue 实现图片滚动效果可以通过自定义组件或第三方库完成。以下是两种常见方法: 方法一:使用 CSS 动画和 Vue 动态绑定 通过 Vue 的 v-for…