当前位置:首页 > VUE

vue实现图片上传裁剪

2026-02-25 04:48:08VUE

Vue 实现图片上传裁剪

安装依赖

需要安装 vue-cropperjscropperjs 库来处理图片裁剪功能。通过 npm 或 yarn 安装:

npm install vue-cropperjs cropperjs

组件引入

在 Vue 组件中引入 vue-cropper 并注册为局部组件:

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

export default {
  components: {
    VueCropper
  }
}

文件上传处理

通过 input 元素实现文件上传,监听 change 事件获取文件对象:

<input type="file" accept="image/*" @change="handleFileUpload">
methods: {
  handleFileUpload(e) {
    const file = e.target.files[0];
    if (!file) return;

    const reader = new FileReader();
    reader.onload = (event) => {
      this.imageSrc = event.target.result;
      this.$refs.cropper.replace(event.target.result);
    };
    reader.readAsDataURL(file);
  }
}

图片裁剪配置

初始化 vue-cropper 组件并配置裁剪参数:

<vue-cropper
  ref="cropper"
  :src="imageSrc"
  :aspect-ratio="16/9"
  :view-mode="1"
  :auto-crop-area="0.8"
></vue-cropper>

获取裁剪结果

调用 cropper 实例的 getCroppedCanvas 方法获取裁剪后的图片数据:

methods: {
  cropImage() {
    this.$refs.cropper.getCroppedCanvas().toBlob((blob) => {
      const formData = new FormData();
      formData.append('image', blob, 'cropped-image.jpg');
      // 上传 formData 到服务器
    }, 'image/jpeg', 0.9);
  }
}

完整示例代码

<template>
  <div>
    <input type="file" accept="image/*" @change="handleFileUpload">
    <vue-cropper
      ref="cropper"
      :src="imageSrc"
      :aspect-ratio="16/9"
    ></vue-cropper>
    <button @click="cropImage">裁剪并上传</button>
  </div>
</template>

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

export default {
  components: { VueCropper },
  data() {
    return {
      imageSrc: ''
    };
  },
  methods: {
    handleFileUpload(e) {
      const file = e.target.files[0];
      if (!file) return;

      const reader = new FileReader();
      reader.onload = (event) => {
        this.imageSrc = event.target.result;
        this.$refs.cropper.replace(event.target.result);
      };
      reader.readAsDataURL(file);
    },
    cropImage() {
      this.$refs.cropper.getCroppedCanvas().toBlob((blob) => {
        const formData = new FormData();
        formData.append('image', blob, 'cropped-image.jpg');
        console.log('裁剪后的图片数据:', formData);
      }, 'image/jpeg');
    }
  }
};
</script>

注意事项

  • 裁剪比例通过 aspect-ratio 属性控制,设为 NaN 可自由调整。
  • 移动端需添加 touch-action: none 样式解决手势冲突问题。
  • 大图片建议压缩后再裁剪,避免性能问题。

vue实现图片上传裁剪

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

相关文章

vue实现单点

vue实现单点

Vue 实现单点登录(SSO)方案 单点登录(SSO)允许用户在多个相关但独立的系统中使用同一组凭证登录。以下是基于 Vue 的实现方案: 基于 OAuth2/OpenID Connect 的实现…

vue实现流程

vue实现流程

Vue 实现流程的基本步骤 安装 Vue.js 可以通过 CDN 引入或使用 npm/yarn 安装。 CDN 方式: <script src="https://cdn.jsdelivr…

vue实现过滤

vue实现过滤

Vue实现过滤的方法 在Vue中实现数据过滤可以通过多种方式完成,以下是几种常见的方法: 使用计算属性过滤 计算属性是Vue中处理数据过滤的理想选择,它们基于响应式依赖进行缓存,只有在相关依赖发生改…

vue实现全景

vue实现全景

Vue 实现全景效果的方法 使用 Vue 实现全景效果通常需要结合第三方库或框架,以下是几种常见的方法: 使用 Three.js 和 Vue-Three.js Three.js 是一个强大的 3D…

vue实现登出

vue实现登出

实现Vue登出功能 登出功能通常涉及清除用户会话、令牌或本地存储的数据,并重定向到登录页面。以下是几种常见的实现方式: 清除用户令牌和状态 在Vuex的store中定义一个logout mutati…

vue 动画实现

vue 动画实现

Vue 动画实现方式 Vue 提供了多种方式实现动画效果,主要分为内置组件和第三方库集成。 使用 Vue 内置过渡组件 Vue 的 <transition> 和 <transit…