当前位置:首页 > 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:

vue实现图片裁剪上传

<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 方法获取。
  • 移动端可能需要额外处理手势和缩放问题。

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

相关文章

react如何添加图片

react如何添加图片

在React中添加图片的方法 使用import导入本地图片 将图片文件放在项目目录中(如src/assets),通过import语句引入后作为src属性值: import logo from './…

react如何引用图片

react如何引用图片

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

js 实现图片轮播

js 实现图片轮播

基础实现方案 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS负责样式布局,JavaScript处理轮播逻辑。 <div class="…

js实现文件的上传

js实现文件的上传

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。HTML部分需要包含一个文件选择控件和一个提交按…

vue实现生成图片

vue实现生成图片

Vue 实现生成图片的方法 使用 html2canvas 库 html2canvas 是一个流行的库,可以将 DOM 元素转换为 Canvas,进而生成图片。适用于 Vue 项目。 安装 html2…

vue实现图片剪切

vue实现图片剪切

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