vue3图片头像裁剪上传

vue3中使用组件tui-image-editor进行图片处理 vue3中使用tui-image-editor对图片进行处理 阅读详情

效果图
在这里插入图片描述

1.安装vue-cropper

pnpm add vue-cropper@next

2.组件内引用

import 'vue-cropper/dist/index.css'//引入圖片裁剪
import { VueCropper }  from "vue-cropper";

3.html部分

<van-popup v-model:show="showCropper" overlay-class="dialog" @click-overlay="delCropper">
    <div class="button-group">
      <van-button type="success" size="mini" @click="getCropBlob">Confirm</van-button>
      <van-button type="danger" size="mini" @click="delCropper">Cancel</van-button>
    </div>
      <VueCropper
          ref="cropper"
          :img="option.img"
          :outputSize="option.outputSize"
          :outputType="option.outputType"
          :info="option.info"
          :full="option.full"
          :autoCropWidth="option.autoCropWidth"
          :autoCropHeight="option.autoCropHeight"
          :canMove="option.canMove"
          :canMoveBox="option.canMoveBox"
          :original="option.original"
          :autoCrop="option.autoCrop"
          :fixed="option.fixed"
          :fixedNumber="option.fixedNumber"
          :centerBox="option.centerBox"
          :infoTrue="option.infoTrue"
          :fixedBox="option.fixedBox"
          :high="option.high"
          :mode="option.mode"
      >

      </VueCropper>
  </van-popup>

4.css部分

<style lang="scss" scoped>
:deep(.van-popup) {
  width: 80%;
  height: 80%;
  overflow: hidden;
}
.button-group {
  display: flex;
  justify-content: space-between;
  button {
    margin: 10px;
  }
}
</style>

5.js部分


const first_name = ref()
const last_name = ref()
const phone = ref()
const email = ref()
const wechat = ref()
const line_id = ref()
const fileList = ref([])
const cropper = ref(null)//截取的dom元素
const file = ref()
const option = ref({//裁剪參數
  img: null,
  outputSize: 1,
  info: false, // 裁剪框的大小信息
  outputType: 'jpeg', // 裁剪生成图片的格式
  canScale: false, // 图片是否允许滚轮缩放
  autoCrop: true, // 是否默认生成截图框
  autoCropWidth:  '100px', // 默认生成截图框宽度
  autoCropHeight: '100px', // 默认生成截图框高度
  high: true, // 是否按照设备的dpr 输出等比例图片
  fixedBox: false, // 固定截图框大小 不允许改变
  fixed: true, // 是否开启截图框宽高固定比例
  fixedNumber: [1, 1], // 截图框的宽高比例
  full: true, // 是否输出原图比例的截图
  canMoveBox: true, // 截图框能否拖动
  original: false, // 上传图片按照原始比例渲染
  centerBox: true, // 截图框是否被限制在图片里面
  infoTrue: false, // true 为展示真实输出图片宽高 false 展示看到的截图框宽高
  mode: '100% auto' // 图片默认渲染方式
})
const showCropper = ref(false)

const router = useRouter()

/**
 * 選取圖片後
 * @param file
 * @returns {boolean}
 */
function beforeRead(file) {
  option.value.img = URL.createObjectURL(file)
  showCropper.value = true
  return true
}

/**
 * 取消截圖
 */
function delCropper() {
  fileList.value = []
  showCropper.value = false
}

/**
 * 確認截圖
 */
function getCropBlob() {
  cropper.value.getCropData(e => {
    file.value = e
    showCropper.value = false
  })
}


/**
 * 修改個人信息
 * @type {(function(): void)|*}
 */
const onSubmit = useThrottleFn(() => {
  if(fileList.value.length === 0) {
    let form = {
      first_name: first_name.value,
      last_name: last_name.value,
      phone: phone.value,
      email: email.value,
      wechat: wechat.value,
      line_id: line_id.value
    }
    updateMeApi(form).then(res => {
      if(res.status === 201 ||  res.status === 200) {
        Toast.success('Success');
        setTimeout(() => {
          router.push('/me')
        },2000)
      }
    })
  }else {
    let form = {
      image: file.value,
      first_name: first_name.value,
      last_name: last_name.value,
      phone: phone.value,
      email: email.value,
      wechat: wechat.value,
      line_id: line_id.value
    }
    updateMeApi(form).then(res => {
      if(res.status === 201 ||  res.status === 200) {
        Toast.success('Success');
        setTimeout(() => {
          router.push('/me')
        },2000)
      }
    })
  }
},1000)

6.表单部分仅供参考

 <van-form @submit="onSubmit">
    <header>
      <h1>Personal</h1>
      <h4>Edit</h4>
      <van-field name="uploader" class="upload">
        <template #input>
          <van-uploader :max-count="1" multiple v-model="fileList" :before-read="beforeRead"/>
        </template>
      </van-field>
    </header>
      <h3>Information</h3>
      <van-cell-group inset>
        <van-field
            v-model="first_name"
            name="名"
            placeholder="First Name"
            :rules="[{ required: true, message: 'Please fill your first name' }]"
        />
      </van-cell-group>
      <van-cell-group inset>
        <van-field
            v-model="last_name"
            name="姓"
            placeholder="Last Name"
            :rules="[{ required: true, message: 'Please fill your last name' }]"
        />
      </van-cell-group>
      <van-cell-group inset>
        <van-field
            v-model="phone"
            name="手機號"
            type="Number"
            placeholder="Phone Number such as 886xxxx"
            :rules="[{ required: true, message: 'Please fill your phone number' }]"
        />
      </van-cell-group>
      <van-cell-group inset>
        <van-field
            v-model="email"
            type="email"
            name="用户名"
            placeholder="E-mail"
        />
      </van-cell-group>
      <van-cell-group inset>
        <van-field
            v-model="wechat"
            name="用户名"
            placeholder="WeChat ID"
        />
      </van-cell-group>
      <van-cell-group inset>
        <van-field
            v-model="line_id"
            name="用户名"
            placeholder="LINE ID"
        />
      </van-cell-group>
      <div>
        <van-button round block type="success" native-type="submit">
          Save
        </van-button>
      </div>
    </van-form>
Vue3+Node.js前后端用户头像上传+更新功能 【代码】Vue3+Node.js前后端用户头像上传+更新功能。 阅读详情

相关推荐

告别图片裁剪烦恼:手把手教你用Cropper.js在Vue3项目中实现头像上传裁剪功能

本文详细介绍了如何在Vue3项目中使用Cropper.js实现头像上传裁剪功能,解决传统图片裁剪的痛点。通过环境准备、核心功能实现、UI库集成及性能优化等步骤,帮助开发者快速构建高效、用户友好的头像上传组件,提升Web应用的用户体验。

weixin_30386713的博客 186

vue 头像修改-裁剪图片 vue-cropper

目录 安装插件vue-cropper 页面中引用插件 安装插件vue-cropper npm install vue-cropper --save 页面中引用插件 import {VueCropper} from 'vue-cropper' components: {VueCropper}, 原头像 <div style="text-align: center"> <img style="border-radius: 50......

朝阳39的博客 6095

vue3:十六、个人中心-个人信息-头像裁剪、功能

vue3:十六、个人中心-个人信息-头像裁剪、功能

weixin_46001736的博客 1155

vue3.0上传图片裁剪

vue3.0上传图片 github

weixin_43787161的博客 938

Vue3头像上传实战:用el-upload+vue-cropper打造完美裁剪组件(附完整代码)

本文详细介绍了如何使用Vue3结合el-upload和vue-cropper实现高效的头像上传与裁剪功能。通过实战代码演示,讲解了文件验证、图片裁剪、压缩上传等核心功能的实现方法,并提供了移动端适配和性能优化建议,帮助开发者快速构建用户体验优秀的头像上传组件。

weixin_28692867的博客 309

Vue3头像上传实战:Element Plus的el-upload搭配vue-cropper实现完美裁剪(附完整代码)

本文详细介绍了在Vue3项目中,如何将Element Plus的el-upload组件与vue-cropper图片裁剪库结合,实现一个功能完善、用户体验优秀的头像上传与裁剪组件。文章提供了从环境搭建、组件封装、业务集成到高级优化(如移动端适配、图片压缩)的完整实战代码,帮助开发者快速构建健壮的头像管理功能。

weixin_29021757的博客 150

vue3 裁剪图片、头像组件封装 elementPlus上传组件+cropper

如果原先就有图片,则点击修改时直接出现原图片,用户可点击【选择】重新上传再裁剪,也可直接裁剪原图片提交。用户上传的头像、封面等图片需要符合一定的比例,网站需要帮助用户进行预处理,确保图片显示时不会变形。点击上传按钮选择文件后,出现裁剪弹窗。

2301_76513773的博客 2349

Vue3 + Cropper.js 实战:构建企业级用户头像裁剪上传组件(含SpringBoot后端对接与完整源码)

本文详细介绍了如何使用Vue3和Cropper.js构建企业级用户头像裁剪上传组件,包括前端实现与SpringBoot后端对接。通过模块化设计、实时预览、上传进度显示等企业级功能增强,提升用户体验。文章还提供了完整的源码示例和性能优化技巧,帮助开发者快速实现高质量的头像裁剪功能。

weixin_27945229的博客 209

在vue3中使用vue-cropper完成头像裁剪上传图片功能

最终效果如下: vue3项目,使用了element-plus组件库,和vue-cropper头像上传插件,实现了一个头像组件 插件文档:https://www.npmjs.com/package/vue-cropper/v/0.6.2?activeTab=readme 同时参考了文章:https://blog.csdn.net/m0_62317155/article/details/131691932 vue-cropper一个奇怪的bug是,使用此插件就不能导入vue的h函数,否则无法正常工作。另外,v

rolling_kitten的博客 1792

Vue中使用vue-croper插件实现图片上传裁剪并传到SpringBoot后台接口

场景 前后端分离的项目,前端修改头像时,需要对头像进行裁剪并且能实时预览,然后上传到SpringBoot后台。 实现效果如下 注: 博客:https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。 实现 插件官网 https://github.com/xyxiao001/vue-cropper 安装插件 npm install vue-cropper 引用插件 组件内使用 impo.

BADAO_LIUMANG_QIZHI的博客 4370

vue3 - 超详细 cropper.js 实现图片(头像)裁剪效果功能,在vue3中上传图像后按比例进行图片的裁剪及实时预览,Element / Ant Desi(详细示例源码,一键复制开箱即用!)

vue3图片裁剪及实时预览,vue3 vue-cropper,vue3头像裁剪,vue3 el-upload+vue-cropper 图像图片头像裁剪上传,vue3怎么进行图片的裁剪,vue3使用vue-cropper图片裁剪,vue3项目如何实现头像图片裁剪上传功能,vue3网站pc怎么将上传的图片按比例进行裁剪,vue3+element plus实现图片上传按尺寸大小裁剪,vue3中图片上传使用cropperjs 头像裁剪,vue3中图片上传使用cropperjs 头像裁剪,vue3好用的图片裁剪插件组

✅ 精选推荐文章 4506

pnpm-vue3-ts:裁剪 / 上传裁剪 / 头像-商品图片处理-图片编辑 / vue-cropper

Vue-Cropper 是一个基于 Vue.js 的轻量级图片裁剪组件,专为前端项目中的图片裁剪需求设计。它提供了丰富的功能和灵活的配置选项,支持多种图片格式输入和输出,适用于头像裁剪、商品图片处理、图片编辑等场景。

snow的博客 477

防火墙——双机热备理论讲解

本端和对端协商失败。有可能是因为本端和对端设备的软件版本不一致、某端配置错误、对端设备的心跳接口状态为Down、HRP源或目的端口号被修改、或者底层链路不通等原因导致。会话表、SeverMap表、IP监控表、分片缓存表、GTP表、黑名单、PAT方式端口映射表、NO-PAT方式地址映射表。两台设备一主一备,正常情况下业务流量由主设备处理,当主设备故障时,业务流量平滑切换到备用设备进行处理,业务不中断。开启自动备份后,当主用设备配置了一条可备份的命令或产生了可备份的会话表状态时,会直接备份到备用设备上。

m0_49864110的博客 2万+

前端插件库之vue3使用vue3-cropper上传头像(裁剪图片、上传)

vue3-cropper切割图片并上传

weixin_46372074的博客 2909

ROS2通过ros2_socketcan实现CAN总线高效数据过滤与多节点通信

本文详细解析了ROS2通过ros2_socketcan实现CAN总线高效数据过滤与多节点通信的技术方案。文章重点探讨了CanFilterList的工作原理、多过滤器组合使用及动态配置策略,有效解决了工业应用中CAN总线数据过载问题,显著降低了CPU负载并提升了系统实时性。

n4o5p6q7r的博客 215

超越图灵机——论人工智能实现的可能性(一)

超越图灵机——论人工智能实现的可能性(一)我认为人工智能是可以实现到逻辑思维这一步的,因为逻辑思维可以完全用字符串来表示,图灵机可以把任意单元置成任意值,在这一点上是完备的,这就足以描述逻辑思维了,所以用图灵机完全可以实现到逻辑思维。当然图灵机会受到哥德尔不完备性的制约,但是逻辑系统也会受到同样的制约,所以我认为完全可以用图灵机实现逻辑思维。那么逻辑思维的本质机理与图灵机是什么关系?逻辑思

太极语言 1万+

vue3 - 最新详细实现头像上传并裁剪功能,用户上传头像裁剪圆形并上传到服务器教程,可搭配element plus或ant design vue组件库,支持头像预览、完美对接服务端接口

以上是一个基本的步骤指南,具体实现的细节将根据您选择的组件库和服务端接口的具体情况有所差异。在服务端接口中,接收并处理上传的头像文件和裁剪后的头像图片。根据选择的组件库,取消对应组件的注释,并根据需要配置组件的属性和事件。中定义一个变量来存储上传的头像图片URL和裁剪后的头像图片URL。指令将上传的头像图片URL绑定到页面中的一个变量,并使用。中实现处理上传的头像文件和处理裁剪后的头像图片的方法。组件导入到您的需要使用头像上传和裁剪功能的页面中。,并在其中实现头像上传和裁剪功能。方法处理裁剪后的头像图片。

weixin_41513488的博客 901

DS250DF410寄存器配置实战:从原理到调试的高速SerDes信号优化指南

在高速串行通信领域,SerDes(串行器/解串器)技术是实现芯片间高速数据传输的核心。其工作原理是通过时钟数据恢复(CDR)从串行数据流中提取时钟,并利用均衡技术补偿信道损耗。这项技术的核心价值在于突破PCB走线或电缆的带宽限制,确保在25Gbps及以上速率下数据的可靠传输。其应用场景广泛覆盖数据中心、高性能计算和通信设备中的高速背板、光模块及芯片互连。本文以TI的DS250DF410多通道重定时器为例,深入剖析其寄存器配置,特别是如何通过精细调控其自适应均衡器和眼图监测模块,实现对高速链路的信号整形与质量

aodiyi6351的博客 384

vue3实战九、vue3+vue-cropper实现头像修改

开发客户端或者管理后台的时候,避免不了个人信息的修改,其中就涉及到了头像修改,使用vue3+vite+ts+pinia+elementPlus+cropper实现一个头像裁剪等操作的头像修改功能。

前端开发工程师 1194

基于STM32的可穿戴式多生理参数实时监测与预警系统

针对传统可穿戴健康设备存在的生理参数监测种类单一、数据处理依赖云端导致响应滞后、续航能力弱等问题,设计一种基于STM32的可穿戴式多生理参数实时监测与预警系统。系统以STM32L476RG低功耗微控制器为核心,集成心率血氧传感器、体温传感器、血压传感器,实现人体心率、血氧饱和度、体温、收缩压/舒张压的同步采集;通过边缘端轻量化数据处理算法完成参数异常判定,结合低功耗硬件设计与软件休眠策略,在保证监测精度的同时延长续航。测试结果表明,系统心率监测误差≤2次/分钟,血氧饱和度误差≤2%,体温误差≤±0.2℃,血

m0_74026776的博客 2039

Horn-Schunck光流算法的Python实现

光流是计算机视觉领域中的一个重要概念,它描述了图像中物体在时间上的运动。Horn-Schunck光流算法是一种经典的光流估计方法,通过对图像的亮度变化进行建模,来估计像素的运动速度。在本文中,我们将使用Python实现Horn-Schunck光流算法,并提供相应的源代码。请注意,该算法假设图像上的亮度变化主要由物体的运动引起,并且假设光流在整个图像上是稠密的。在上面的示例中,我们首先读取了两个输入图像,然后使用我们实现的Horn-Schunck光流算法估计了它们之间的光流。首先,我们需要导入一些必要的库。

持续更新 495

Vue-Cropper实战:电商平台头像上传系统开发

电商平台的用户系统需要让用户上传和设置个人头像,这个功能看似简单,但实际需要考虑很多细节。经过调研,发现Vue-Cropper这个组件特别适合实现图片裁剪功能,于是决定用它来构建整个头像上传系统。使用Node.js搭建简单的文件上传接口,接收前端传来的图片数据,处理后存储到服务器指定目录。在生成最终头像前,使用canvas对图片进行压缩,确保文件大小不超过200KB,同时保持清晰度。上传过程中显示进度条,并处理各种可能的错误情况,比如网络中断、服务器错误等。的便捷开发环境,相信能事半功倍。

RubyLion28的博客 350

YOLOv8改进策略【损失函数篇】| 2024 引进Focaler-IoU损失函数 加强边界框回归 (Focaler-DIoU、Focaler-GIoU、Focaler-CIoU)

本文记录的是改进YOLOv8的损失函数,将其替换成。现有研究通过利用边界框之间的几何关系来提高回归性能,但忽略了困难样本和简单样本分布对边界框回归的影响。不同检测任务中困难样本和简单样本的分布不同,对于简单样本占主导的检测任务,关注简单样本的边界框回归有助于提高检测性能;对于困难样本比例较高的检测任务,需要关注困难样本的边界框回归。,提高检测器在不同检测任务中的性能。实现的。

Limiiiing的博客 1221

使用el-upload组件上传头像时,服务端控制台报错 ERROR [unhandledRejection] read ECONNRESET (报错时间) at TCP.onStre。

时,el-upload 会向当前页面发送请求,该请求携带了我上传的图片。但是当图片过大时,应该是本地启动的服务器配置,无法处理过大的文件,导致超时或者连接重置。的,我这边的代码是自动裁剪的,根据最短边,1:1的效果,类似css里的object-fit: cover;中设置了自己的向后端发送请求的方法。此方法可以直接取消ElUpload的自动上传,可以结合其他接口,先保存图片,然后通过其他触发方式,将图片上传。一下,这里推荐一下我查阅资料时找到的文章,这位博主讲的挺详细的,而且有好几篇介绍图片压缩的。

m0_60864532的博客 1940

SpringBoot从入门到精通(全)

前言 ==本博文结合软件idea进行主要讲解== **springboot的特性主要有** - 简化 Spring 应用程序的创建和开发过程 - 抛弃了繁琐的 xml 配置过程,采用大量的默认配置简化以及注解反射 - 直接使用 java main 方法启动内嵌的 Tomcat 服务器运行 Spring Boot 程序,不需要部署 war 包文件 **四大核心**分别为自动配置、起步依赖、Actuator和命令行界面

码农研究僧的博客 7万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

上一篇: vue3计算时间差并格式化时间差
月光下,遗忘黑暗
博客等级 码龄7年 0粉丝 5原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月光下,遗忘黑暗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值