vue 图片等比例缩放上传

需求:上传图片之前按比例缩小图片分辨率,宽高不超过1920不处理图片,宽高超过1920则缩小图片分辨率,如果是一张图片请参考这篇博客:js实现图片压缩、分辨率等比例缩放
我根据这篇博主的分享,写下了我的循环上传的分辨率等比缩小
功能:点击+号,新增一项,点击- 号 删除一项
在这里插入图片描述
:auto-upload="false" 使用elementUI组件不能使他自动上传,主要功能是上传最左边的图片

 <el-form ref="form" :model="form"  label-width="120px"><el-form-item label="资源列表:"><div class="ziyuan" flex v-for="(item, indexes) in  addList " :key="item.idxxx"><div style="margin-top: 9px;">//图片(主要功能在这里)<el-upload :action="domins + '/common/upload'":class="{ disabled: item.uploadDisabled }" list-type="picture-card":auto-upload="false":on-remove="handleRemove.bind(null, { 'index': indexes, 'data': item })":on-change="handleChange.bind(null, { 'index': indexes, 'data': item })":file-list="item.fileList" accept="image/png, image/jpeg"><i class="el-icon-plus"></i></el-upload><el-dialog :visible.sync="dialogVisible"><img width="100%" :src="item.dialogImageUrl" alt=""></el-dialog></div><div class="yasuo" flex="cross:center"><div><div style="height: 68px;">//压缩包<el-upload ref="uploadzip" :action="domins + '/common/upload'":before-upload="beforeUploadZip" :on-remove="handleRemoveZip":on-success="handleAvatarSuccessZip.bind(null, { 'index': indexes, 'data': item })":file-list="item.fileListZip" :auto-upload="true" accept=".zip ,.mp4":limit="1"><el-button size="small" type="primary">选择资源包</el-button></el-upload></div></div></div><div class="airadio"><el-radio-group v-model="item.way" ><el-radio :label="0">Android</el-radio><el-radio :label="1">ios</el-radio><el-radio :label="2">视频</el-radio></el-radio-group></div><div style="margin-top: 11px;">//  '+'<i class="el-icon-circle-plus-outline" style="color: #264E71;"@click="plusOne(indexes)"></i>//  '+'<i class="el-icon-remove-outline" style="color: #264E71;" v-show="addList.length > 1"@click="removeOne(indexes, item.id, item)"></i></div></div></el-form-item></el-form>

代码:

<script>
// 等比例缩小图片
function imageScale(width, originWidth, originHeight) {const scaleRatio = width / originWidth;const scaleHeight = scaleRatio * originHeight;return [width, scaleHeight];
}export default {components: {  },data() {return {form: {},addList: [{id: 0,uploadDisabled: false,album: '',zip: '',way: 0,idxxx: 0}],}},methods:{handleRemove(obj, file, fileList) {let index = obj.index;this.addList[index].uploadDisabled = falsethis.$forceUpdate()},// 处理图片compress(file, scaleWidth, quality = 0.5) {return new Promise((resolve, reject) => {const reader = new FileReader();console.log(file, 'file----');reader.readAsDataURL(file.raw);reader.onload = (e) => {let img = new Image();img.src = e.target.result;img.onload = function () {// 等比例缩放图片const [width, height] = imageScale(scaleWidth,img.width,img.height);let canvas = document.createElement("canvas");img.width = canvas.width = width;img.height = canvas.height = height;let ctx = canvas.getContext("2d");ctx.drawImage(img, 0, 0, img.width, img.height);canvas.toBlob((blob) => {resolve(blob);},"image/jpeg",quality);};img.onerror = function () {reject();};};});},handleChange(obj, file, fileList) {console.log(file, fileList, 'file, fileList识别图路径');if (fileList.length >= 1) {let reader = new FileReader()reader.readAsDataURL(file.raw) // 必须用file.rawreader.onload = () => {let img = new Image()img.src = reader.resultimg.onload = () => {console.log(img.width, 'img.width');console.log(img.height, 'img.height');// 宽高超过1920则缩小图片分辨率if (img.width > 1920 || img.width == 1920 || img.height > 1920 || img.height == 1920) {this.compress(file, 1024).then((blob) => {// 根据后端的要求传数据,如果要求是blob,则不需要处理数据,我这边需求是上传file文件流//处理成file文件流 let f = new File([blob], 'image.jpg', { type: 'image/jpeg' })var form = {};form = new FormData();form.append('file', f);this.$axios.post(this.domins + '/common/upload', form).then((res) => {let index = obj.index;this.addList[index].uploadDisabled = truethis.addList[index].album = res.data.data.fullurlconsole.log(this.addList, '==addList==');})});} else {//宽高不超过1920不处理图片let form = {};form = new FormData();// form 需要的是el-upload 中的file.rowform.append('file', file.raw);this.$axios.post(this.domins + '/common/upload', form).then((res) => {let index = obj.index;this.addList[index].uploadDisabled = truethis.addList[index].album = res.data.data.fullurlconsole.log(this.addList, '==addList=3333=');})}}}}},}
}
</script>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/220561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS使用Web组件

Web组件的使用 1 概述 相信大家都遇到过这样的场景&#xff0c;有时候我们点击应用的页面&#xff0c;会跳转到一个类似浏览器加载的页面&#xff0c;加载完成后&#xff0c;才显示这个页面的具体内容&#xff0c;这个加载和显示网页的过程通常都是浏览器的任务。 ArkUI为我…

chatGPT 国内版,嵌入midjourney AI创作工具

聊天GPT国内入口,免切网直达,可直接多语言对话,操作简单,无需复杂注册,智能高效,即刻使用.可以用作个人助理,学习助理,智能创作、新媒体文案创作、智能创作等各种应用场景! 地址&#xff1a; https://ai.wboat.cn/

【51单片机系列】直流电机使用

本文是关于直流电机使用的相关介绍。 文章目录 一、直流电机介绍二、ULN2003芯片介绍三、在proteus中仿真实现对电机的驱动 51单片机的应用中&#xff0c;电机控制方面的应用也很多。在学习直流电机(PWM)之前&#xff0c;先使用GPIO控制电机的正反转和停止。但不能直接使用GPIO…

武汉灰京文化:数字黄金时代,游戏经济的璀璨崛起

在数字化时代的冲击下&#xff0c;游戏行业已经成为一个经济体量巨大的引擎。游戏的销售额和盈利能力呈现出逐年增长的趋势&#xff0c;不仅吸引了大量投资者和研发商&#xff0c;也带动了相关产业的繁荣&#xff0c;构建起一个庞大而完整的游戏生态系统。 游戏市场的繁荣是游…

AcWing 3709:单链表节点交换 ← 四川大学考研机试题

【题目来源】 https://www.acwing.com/problem/content/3712/【题目描述】 输入一个单链表&#xff0c;依次交换前2个数&#xff0c;第3、4个数&#xff0c;第5、6个数&#xff0c;…&#xff0c;以此类推&#xff0c;直到操作完整个链表。 如果链表长度是奇数&#xff0c;则最…

06 python 文件基础操作

6.1 .1文件读取操作 演示对文件的读取 # 打开文件 import timef open(02_word.txt, r, encoding"UTF-8") print(type(f))# #读取文件 - read() # print(f读取10个字节的结果{f.read(10)}) # print(f读取全部字节的结果{f.read()})# #读取文件 - readLines() # lines…

面试官:说说你对 linux 用户管理的理解?相关的命令有哪些?

面试官&#xff1a;说说你对 linux 用户管理的理解&#xff1f;相关的命令有哪些&#xff1f; 一、是什么 Linux是一个多用户的系统&#xff0c;允许使用者在系统上通过规划不同类型、不同层级的用户&#xff0c;并公平地分配系统资源与工作环境 而与 Windows 系统最大的不同…

基于MyBatis二级缓存深入装饰器模式

视频地址 学习文档 文章目录 一、示意代码二、装饰器三、经典案例—MyBatis二级缓存1、Cache 标准定义2、PerpetualCache 基础实现3、增强实现3-1、ScheduledCache3-2、LruCache 先来说说我对装饰器理解&#xff1a;当你有一个基础功能的代码&#xff0c;但你想在不改变原来代…

高效营销系统集成:百度营销的API无代码解决方案,提升电商与广告效率

百度营销API连接&#xff1a;构建无代码开发的高效集成体系 在数字营销的高速发展时代&#xff0c;企业追求的是快速响应市场的能力以及提高用户运营的效率。百度营销API连接正是为此而生&#xff0c;它通过无代码开发的方式&#xff0c;实现了电商平台、营销系统和CRM的一站式…

墒情监测FDS-400 土壤温湿电导率盐分传感器

墒情监测FDS-400 土壤温湿电导率盐分传感器产品概述 土壤温度部分是由精密铂电阻和高精度变送器两部分组成。变送器部分由电源模块、温度传感模块、变送模块、温度补偿模块及数据处理模块等组成&#xff0c;解决铂电阻因自身特点导入的测量误差&#xff0c;变送器内有零漂电路…

前端开发中requestAnimationFrame和setInterval、setTimeout的介绍和优缺点对比

一、requestAnimationFrame() requestAnimationFrame是一种在浏览器中实现动画循环的技术&#xff0c;它通过定时器机制来周期性地调用指定的回调函数&#xff0c;以实现网页动画的效果。与传统的setInterval和setTimeout不同&#xff0c;requestAnimationFrame具有更好的浏览…

Redis队列原理解析:让你的应用程序运行更加稳定!

一、消息队列简介 消息队列&#xff08;Message Queue&#xff09;&#xff0c;字面意思就是存放消息的队列。最简单的消息队列模型包括 3 个角色&#xff1a; 消息队列&#xff1a;存储和管理消息&#xff0c;也被称为消息代理&#xff08;Message Broker&#xff09;生产者…

Json格式化

Json格式化 大家好&#xff0c;我是微赚淘客机器人的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; Json格式化&#xff1a;让数据更亮眼&#xff0c;解密Json的奇妙世界 在现代Web开发中&#xff0c;Json&#xff08;JavaScript Object N…

Turtle绘制菱形-第11届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第16讲。 Turtle绘制菱形&a…

六.聚合函数

聚合函数 1.什么是聚合函数1.1AVG和SUM函数1.2MIN和MAX函数1.3COUNT函数 2.GROUP BY2.1基本使用2.2使用多个列分组2.3GROUP BY中使用WITH ROLLUP 3.HAVING3.1基本使用3.2WHERE和HAVING的区别 4.SELECT的执行过程4.1查询的结构4.2SELECT执行顺序4.3SQL执行原理 1.什么是聚合函数…

pip的常见60条基本命令和使用详解

pip是Python的包管理工具&#xff0c;用于安装、升级和卸载Python包。以下是pip的常见基本命令和使用详解&#xff1a; 1. 安装包&#xff1a;pip install package_name 该命令用于安装指定的Python包。例如&#xff0c;要安装名为xlwt的包&#xff0c;可以运行命令"pip i…

用友 U8总账凭证打印设置

总账--凭证打印——设置 是设置凭证打印显示的格子框&#xff0c;勾上就有框&#xff0c;去掉就没有框。

多家安全设备存在远程命令执行漏洞复现 [附POC]

文章目录 多家安全设备(防火墙产品)存在远程命令执行漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响产品0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现多家安全设备(防火墙产品)存在远程命令执行漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内的相…

xcode-文件

IOSDeviceSupoprt 共享缓存库 当你使用新的 iOS 设备连接到 Xcode 时&#xff0c;Xcode 会自动下载并存储相应版本的设备支持文件。 每个 iOS 版本都有一个对应的设备支持文件集&#xff0c;这些文件包含有关设备架构和操作系统的信息&#xff0c;以便 Xcode 能够正确地调试和…

判断css文字发生了截断,增加悬浮提示

示例&#xff1a; 固定显示宽度&#xff0c;溢出显示...&#xff0c;利用了css的属性&#xff0c;想要实现成下面这样&#xff1a; 针对溢出的文字&#xff0c;hover显示全部。 提示很好加&#xff0c;使用tooltip组件就行了&#xff0c;难点是如何判断是否发生了文字溢出。…