<van-uploader v-model="fileList" multiple :after-read="afterRead" :max-count="" />

2:

  afterRead(file){
if(this.fileList.length > ){
this.fileList.splice();
this.$msg({
text:'只能选择这么多!',
type:'info'
})
return false;
} let maxSize = * * ; //自己定义的文件大小,超过多少M就开始压缩(现在是1M)
let fileObj = file.file; // 当前的图片
if (fileObj.size > maxSize) {
this.imgcompress(fileObj, file);
}else{
let Files = this.Files;
Files.push(file.file);
}
},
imgcompress(file, files) {
const img = document.createElement('img')
const reader = new FileReader(); // 读取文件资源实例
reader.readAsDataURL(file); //读取图片资源
reader.onload = e => { //读取成功
img.src = e.target.result;
const { width: originWidth, height: originHeight } = img; //上传的图片的宽高
const maxWidth = , //设置一个canvas 的最大宽高
maxHight = ;
if (originWidth > maxWidth || originHeight > maxHight) {
//计算出图片的缩放比例
if (originWidth > originHeight) {
//宽 大于 高
const Proportion = Math.ceil(originWidth / maxWidth);
let targetWidht = parseInt(originWidth / Proportion); //目标的宽度
let targetHeight = parseInt(originHeight / Proportion); //目标的高度 this.createCanvasCompress(targetWidht, targetHeight, img, files);
} else {
const Proportion = Math.ceil(originHeight / maxHight); //高大于宽
let targetWidht = parseInt(originWidth / Proportion); //目标的宽度
let targetHeight = parseInt(originHeight / Proportion); //目标的高度
let bold = this.createCanvasCompress(
targetWidht,
targetHeight,
img,
files
);
}
} else {
let quality = 0.8;
this.createCanvasCompress(
originWidth,
originHeight,
img,
files,
quality
);
}
};
},
createCanvasCompress(targetWidth, targetHeight, img, files, quality) {
let that = this;
return new Promise((resolve, reject) => {
const canvas = document.createElement("canvas");
const context = canvas.getContext("2d");
// 设置宽高度为等同于要压缩图片的尺寸
canvas.width = targetWidth;
canvas.height = targetHeight;
context.clearRect(, , targetWidth, targetHeight);
//将img绘制到画布上
console.log(targetWidth, targetHeight);
context.drawImage(img, , , targetWidth, targetHeight); let bold = canvas.toBlob(
function(blob) {
resolve(blob);
that.Files.push(blob); //压缩之后的图片
},
"image/png",
quality
);
});
// 创建画布
},

vue + vant 上传图片之压缩图片的更多相关文章

  1. 结合Vue.js的前端压缩图片方案

    这是一个很简单的方案.嗯,是真的. 为什么要这么做? 在移动Web蓬勃发展的今天,有太多太多的应用需要让用户在移动Web上传图片文件了,正因如此,我们有些困难必须去攻克: 低网速下上传进度缓慢,用户体 ...

  2. java 上传图片 并压缩图片大小

    Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...

  3. java 上传图片 并压缩图片大小(转)

    Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...

  4. 上传图片时压缩图片 - 前端(canvas)做法

    HTML前端代码: <?php $this->layout('head'); ?> <?php $this->layout('sidebar'); ?> <m ...

  5. java上传图片并压缩图片大小

    Thumbnailator 是一个优秀的图片处理的Google开源Java类库.处理效果远比Java API的好.从API提供现有的图像文件和图像对象的类中简化了处理过程,两三行代码就能够从现有图片生 ...

  6. java实现上传图片并压缩图片大小功能

    缩略图压缩文件jar包 <!-- 图片缩略图 --> <dependency> <groupId>net.coobird</groupId> <a ...

  7. vue+element-ui上传图片时压缩大小

    第一种方法:需要安装一个模块 yarn add image-conversion --save <el-upload ref="upload" :data="dat ...

  8. vue+vant 上传图片需要注意的事项

    <van-uploader v-model="fileList" multiple :after-read="afterRead" :max-count= ...

  9. java上传图片时压缩图片

    /** * 函数:调整图片尺寸或生成缩略图 v 1.1 * @param $Image 需要调整的图片(含路径) * @param $Dw 调整时最大宽度;缩略图时的绝对宽度 * @param $Dh ...

随机推荐

  1. luogu P3403 跳楼机 同余最短路

    LINK:跳楼机 很早之前就想学的一个东西.发现这个东西果然神奇. 我们要找到 所有的 w满足 \(w=1+ax+by+cz\).且 \(1\leq w\leq h\) 暴力枚举是不行的. 做法是这样 ...

  2. luogu 4331 [BalticOI 2004]Sequence 数字序列

    LINK:数字序列 这是一道论文题 我去看了一眼论文鸽的论文. 发现讲的还算能懂.可并堆的操作也讲的比较清晰. 对于这道题首先有一个小trick 我们给a数组全部减去其对应的下标这样我们求出来的b数组 ...

  3. 10分钟了解js的宏任务和微任务

    熟悉宏任务和微任务以及js(nodejs)事件循环机制,在写业务代码还是自己写库,或者看源码都是那么重要 看了部分文档,自己总结和实践了一下 js中同步任务.宏任务和微任务介绍 同步任务: 普通任务 ...

  4. lamt环境搭建

    目录 lamt环境搭建 安装apache 安装mysql 安装tomcat 修改配置文件 lamt环境搭建 环境说明: 系统 IP 需要安装的服务 centos7 192.168.32.125 htt ...

  5. 【JZOJ4726】种花 题解(贪心+堆)

    题目大意:在一个长度为$n$的环型序列中取出$m$个数使这$m$个数的和最大,且要求这$m$个数互不相邻. ---------------------- 考虑维护$nxt$和$lst$,即一个数的前驱 ...

  6. Redis服务之高可用组件sentinel

    前文我们了解了redis的常用数据类型相关命令的使用和说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13419690.html:今天我们来聊一下redis ...

  7. 使用HttpClient 发送 GET、POST(FormData、Raw)、PUT、Delete请求及文件上传

    httpclient4.3.6 package org.caeit.cloud.dev.util; import java.io.File; import java.io.IOException; i ...

  8. windows 下部署 .netcore 到 windows service

    接上一篇 <windows 下部署 .netcore 到 iis>,这一篇记录一下怎么将 Asp.Net Core 以 windows 服务的方式部署. 一.修改代码 其实也很简单,只要调 ...

  9. mogilefs 安装与配置

    安装步骤 配置yum 的epel源 yum install perl-Sys-Syslog perl-IO-AIO perl-Net-Netmask -y # 安装依赖的包 取得mogilefs的rp ...

  10. 用 cgo 生成用于 cgo 的 C 兼容的结构体

    假设(并非完全假设,这里有 demo)你正在编写一个程序包,用于连接 Go 和其它一些提供大量 C 结构体内存的程序.这些结构可能是系统调用的结果,也可能是一个库给你提供的纯粹信息性内容.无论哪种情况 ...