当前位置: 首页 > news >正文

vue 前端等比例压缩图片(再转换成文件后上传后端)

前端压缩图片总的来说还是转base64 然后等比例放小宽和高  这个是上次压缩图片的一个扩展

压缩完之后 再将base64 转成blob再转成文件然后再上传  一生要强的前端崽子(后端不支持base64上传) 自己改吧改吧

 // 图片上传async changePic(e) {this.isshangchuantupian=truethis.$message.warning('图片资源正在压缩...')// 获取图片数据  var file = e.target.files[0];var reader = new FileReader();reader.readAsDataURL(file);let ctempfilelet _that = thisreader.onload = await function (event) {// 压缩图片  var img = new Image();img.src = event.target.result;img.onload = function () {var canvas = document.createElement('canvas');var ctx = canvas.getContext('2d');var width = img.widthvar height = img.heightif (Math.max(width, height) > _that.maximg) {if (width > height) {canvas.width = _that.maximg;canvas.height = _that.maximg * height / width} else {canvas.height = _that.maximgcanvas.width = _that.maximg * width / height}} else {canvas.width = width;canvas.height = height;}ctx.drawImage(img, 0, 0, canvas.width, canvas.height);var dataUrl = canvas.toDataURL('image/jpeg', 0.8); // 压缩后的图片数据  var blob = dataURLToBlob(dataUrl); // 将压缩后的图片数据转换为Blob对象  ctempfile = new File([blob], file.name, { type: 'image/jpeg' }); // 将Blob对象封装为File对象  //console.log(ctempfile)let formData = new FormData()// for (let i = 0; i < fileList.length; i++) {//formData.append('xxxx', fileList[i])//}formData.append('update_image', ctempfile)http.post('服务器地址', formData).then(res => {//console.log(res.data.update_image)if (res.data.xxxx) {_that.isshangchuantupian=false} else {_that.$message({message: '图片上传失败:',type: 'error'})}}).catch(err => {console.log(err)})};};// 将Base64编码的图片数据转换为Blob对象  function dataURLToBlob(dataUrl) {var arr = dataUrl.split(','), mime = arr[0].match(/:(.*?);/)[1];var bstr = atob(arr[1]);var n = bstr.length;var u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new Blob([u8arr], { type: mime });}//let fileList = e.target.files},

http://www.lryc.cn/news/279813.html

相关文章:

  • 解决在eclipse2021中,用mysql-connector-java-8.0.18.jar不兼容,导致无法访问数据库问题
  • 5 微信小程序
  • 百度面经整理(2024最新)
  • c++的构造函数
  • 基于ZU19EG的100G-UDP解决方案
  • 行为型设计模式——备忘录模式
  • 自定义HBase负载均衡器MyCustomBalancer实现步骤与代码解析
  • 企业网站建设中常用的英文翻译
  • vscode运行Python的两种方法,及无法运行的原因
  • 【猫头虎分享】全面揭秘鸿蒙4.0:华为的技术革新与市场影响
  • Java内存模型之可见性
  • 【docker】Docker Compose 使用介绍
  • uniapp怎么开发插件并发布
  • 为什么不直接public,多此一举用get、set,一文给你说明白
  • golang 记录一次协程和协程池的使用,利用ants协程池来处理定时器导致服务全部阻塞
  • 【Postman-windows-9.12.2版本安装与汉化】
  • 11Spring IoC注解式开发(下)(负责注入的注解/全注解开发)
  • Grafana Promtail 配置解析
  • 电脑DIY-主板参数
  • JVM知识总结(持续更新)
  • 信息系统安全——基于 KALI 和 Metasploit 的渗透测试
  • 05. 深入理解 GPT 架构
  • PHP开发日志 ━━ php8.3安装与使用组件Xdebug
  • Python - 深夜数据结构与算法之 Two-Ended BFS
  • langchain-Agent-工具检索
  • 猫头虎分享:探索TypeScript的世界 — TS基础入门 ‍
  • Unity-生命周期函数
  • SQL概述及SQL分类
  • [VSCode] VSCode 常用快捷键
  • 函数指针和回调函数 以及指针函数