vue里图片压缩上传组件
//单图上传
<template>
<div>
<div class="uploader" v-if='!dwimg'>
<van-uploader :after-read="ondwRead" accept="image/gif, image/jpeg" multiple>
<van-icon name="photograph" />
</van-uploader>
</div>
<p v-if="dwimg" class="img"><img id="img" :src="dwimg" alt="" @click='yltp(dwimg)'><b @click='htp'><van-icon name="close" /></b></p> </div>
</template>
<script>
import axios from 'axios'
import { Toast } from 'vant';
import { ImagePreview } from 'vant';
import hbsp from '@/components/rwlctbcons/hbsp'
var instance = axios.create({
headers: {'Content-Type': 'multipart/form-data'}
});
export default {
name:'hbsp',
data(){
return{
imgmurl:'',
dwimg:'',
}
},
methods:{
//传值给父组件 父组件监听v-on:dantuEvent='function()'用function接收
childhbdbimg(){
console.log('1111');
this.$emit('dantuEvent',this.dwimg)
},
//删除
htp(){
this.dwimg='';
},
//预览图片
yltp(dwimg){
ImagePreview([
dwimg
]);
},
ondwRead(file){
Toast.loading({
duration: 0,
mask: true,
forbidClick: false,
message: '上传中...'
});
//console.log(file.content);
console.log(file);//未压缩的file
let img = new Image();
img.src = file.content;
this.dwimg=file.content;
let that=this;
img.onload=function(){
that.ontpys(img);
}
//上传成功的图片
function fn(){
setTimeout(() => {
if(that.imgmurl){
that.dwimg= that.imgmurl;
console.log(that.dwimg);
that.imgmurl='';
that.childhbdbimg();
Toast.clear();
}else{
fn();
}
}, 1000);
};
fn();
}, //压缩图片的方法
ontpys(img){
let originWidth = img.width, // 压缩后的宽
originHeight=img.height,
maxWidth = 400, maxHeight = 400,
quality = 0.8, // 压缩质量
canvas = document.createElement('canvas'),
drawer = canvas.getContext("2d");
canvas.width = maxWidth;
canvas.height = originHeight/originWidth*maxWidth;
drawer.drawImage(img, 0, 0, canvas.width, canvas.height);
let base64 = canvas.toDataURL("image/jpeg", quality); // 压缩后的base64图片
let file = this.dataURLtoFile(base64,Date.parse(Date())+'.jpg');
file={content:base64,file:file};
console.log(file);//压缩后的file
this.onimg(file);
},
//base64转file
dataURLtoFile(dataurl,filename){
let arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while(n--){
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr],filename,{type:mime});
},
//图片上传
onimg(file){
//console.log(file.content)
var formData = new FormData();
formData.append("file", file.file);
instance({
url:'/api/img/upload',
method:'post',
headers: {
'token': sessionStorage.token
},
data:formData
})
.then(response=>{
console.log(response)
this.imgmurl=response.data.url;
})
.catch(error=>{
console.log(error)
})
}, }
}
</script>
<style scoped>
.rwlctb_div{
padding: 10px 20px;
line-height: 26px;
} .tb_rwt span{
display: inline-block;
width: 100%;
}
.tb_rwt{
padding: 10px 20px;
}
.tb_rwt span{
display: inline-block;
width: 100%;
}
.tb_title{
text-align: center
}
.van-panel{
margin-top: 10px;
}
.van-row{
text-align: center
}
.van-uploader{
width:1.4rem;
border:1px solid #999;
text-align: center;
height: 1.4rem;
line-height: 1.4rem;
}
.img{
width:1.4rem;
border:1px solid #999;
text-align: center;
height: 1.4rem;
line-height: 1.4rem;
overflow: hidden;
position: relative;
}
.img img{
width: 100%;
}
.img i{
position: absolute;
top: 1px;
right: 1px;
z-index: 11;
}
</style>
vue里图片压缩上传组件的更多相关文章
- vue Base64图片压缩上传OSS
this.compress(result, 800, 0.5).then(val => { //得到压缩图片 let data = val; that.file = that.dataURLto ...
- 基于vue + axios + lrz.js 微信端图片压缩上传
业务场景 微信端项目是基于Vux + Axios构建的,关于图片上传的业务场景有以下几点需求: 1.单张图片上传(如个人头像,实名认证等业务) 2.多张图片上传(如某类工单记录) 3.上传图片时期望能 ...
- 三款不错的图片压缩上传插件(webuploader+localResizeIMG4+LUploader)
涉及到网页图片的交互,少不了图片的压缩上传,相关的插件有很多,相信大家都有用过,这里我就推荐三款,至于好处就仁者见仁喽: 1.名气最高的WebUploader,由Baidu FEX 团队开发,以H5为 ...
- Html5+asp.net mvc 图片压缩上传
在做图片上传时,大图片如果没有压缩直接上传时间会非常长,因为有的图片太大,传到服务器上再压缩太慢了,而且损耗流量. 思路是将图片抽样显示在canvas上,然后用通过canvas.toDataURL方法 ...
- 纯原生js移动端图片压缩上传插件
前段时间,同事又来咨询一个问题了,说手机端动不动拍照就好几M高清大图,上传服务器太慢,问问我有没有可以压缩图片并上传的js插件,当然手头上没有,别慌,我去网上搜一搜. 结果呢,呵呵...诶~又全是基于 ...
- springMVC多图片压缩上传的实现
首先需要在配置文件中添加配置: <!--配置文件的视图解析器,用于文件上传,其中ID是固定的:multipartResolver--> <bean id="multipar ...
- 基于H5+ API手机相册图片压缩上传
// 母函数 function App(){} /** * 图片压缩,默认同比例压缩 * @param {Object} path * pc端传入的路径可以为相对路径,但是在移动端上必须传入的路径是照 ...
- 分享图片压缩上传demo,可以选择一张或多张图片也可以拍摄照片
2016-08-05更新: 下方的代码是比较OLD的了,是通过js进行图片的剪切 旋转 再生成,效率较低. 后来又整合了一个利用native.js本地接口的压缩代码 ,链接在这 .页面中有详细的说明, ...
- js 图片压缩上传(base64位)以及上传类型分类
一.input file上传类型 1.指明只需要图片 <input type="file" accept='image/*'> 2.指明需要多张图片 <input ...
随机推荐
- python 版本配置问题
环境变量里有anaconda 但是命令行输入python却并不是anaconda里的python 这个现象的产生是由于anaconda在环境变量里的顺序靠后,python2.7已经在其他环境变量里被找 ...
- 19-11-05-Night
我就是不行. ZJ: 好像是因为郁闷了才咕掉的…… 33 Miemeng 30 00:01:34 40 00:01:46 0 00:01:22 70 00:01:46 不记得当时怎么想的 T1只会暴力 ...
- php构造方法(函数)基础
什么是构造函数呢?在回答这个问题之前,我们来看一个需求:我们在创建人类的对象时,是先把一个对象创建好后,再给他的年龄和姓名属性赋值,如果现在我要求,在创建人类的对象时,就指定这个对象的年龄和姓名,该怎 ...
- java流对象
Java和C++都是静态类型的面向对象编程语言 stream结尾都是字节流,reader和writer结尾都是字符流 区别: 就是读写的时候一个是按字节读写,一个是按字符. 实际使用通常差不多. 在读 ...
- python3-常用模块之openpyxl(1)
1.创建工作簿 from openpyxl import Workbook # 创建excel对象 wb = Workbook() # 获取第一个sheet = wb.active # 单元格写入内容 ...
- INI文件读写类
public class INIClass { public string inipath; [DllImport("kernel32")] private static exte ...
- HTML编码的用户输入------阻止向Controller的方法传入参数时用链接注入javascript代码或者HTML标记
- Codeforces 938G 线段树分治 线性基 可撤销并查集
Codeforces 938G Shortest Path Queries 一张连通图,三种操作 1.给x和y之间加上边权为d的边,保证不会产生重边 2.删除x和y之间的边,保证此边之前存在 3.询问 ...
- 【NOIP2016提高A组集训第14场11.12】随机游走——期望+树形DP
好久没有写过题解了--现在感觉以前的题解弱爆了,还有这么多访问量-- 没有考虑别人的感受,没有放描述.代码,题解也写得歪歪扭扭. 并且我要强烈谴责某些写题解的代码不打注释的人,像天书那样,不是写给普通 ...
- Mysql8+mybatisGenerator (mysql 8的逆向工程)
最近试了一下mysql8的逆向工程工具 1.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOC ...