JS实现压缩上传图片base64长度功能
这篇文章主要介绍了js实现压缩上传图片base64长度功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
im发送图片,现将图片压缩再上传
1)调用FileReader的reader.readAsDataURL(img);方法,在其onload事件中,将用户选择的图片读入Image对象.
2)在image对象的onload事件中,通过canvas的canvas.getContext('2d')的drawImage方法,将Image改变大小绘制到canvas上.
3)通过canvas.toDataURL("image/jpeg",1);方法,将图片变成base64字符串,放到send_image_value
toDataURL
canvas.toDataURL(type,encoderOptions);
返回值
包含dataURI的DOMString
type
图片格式,默认为image/png
encoderOptions
在指定图片格式为image/jpeg或image/webp的情况下,可以从0到1的区间内选择图片的质量。如果超出取值范围,将会使用默认值0.92。其他参数会被忽略。
html
js
functionimgChange(e){
//检查是否有文件被选中
if(e.files.length!=0){
varfile=e.files[0],
fileType=file.type,
reader=newFileReader();
if(!reader){
e.value='';
return;
};
varsize=file.size;
varmax_size=2*1024*1024;
if(size>max_size){
e.value='';
$("#send_alert").html('fileistoolarge(>2M)');
return;
}
$("#showLoadingimg").show();
reader.onload=function(e){
//读取成功,显示到页面并发送到服务器
e.value='';
varorg_img=e.target.result;
varimage_base64=org_img;
if(size>1024*80){//>80K的
varimg=newImage();
img.src=org_img;
img.onload=function(){
varscale=1;
if(this.width>300||this.height>300){
if(this.width>this.height){
scale=300/this.width;
}else{
scale=300/this.height;
}
}
varcanvas=document.createElement("canvas"),drawer=canvas.getContext("2d");
if(scale!=1){//按最大高度等比缩放
img.width*=scale;
img.height*=scale;
}
canvas.width=img.width;
canvas.height=img.width*(img.height/img.width);
drawer.drawImage(img,0,0,canvas.width,canvas.height);
vartmp_code=image_base64=canvas.toDataURL(fileType);
if(tmp_code!='data:,'){
image_base64=tmp_code;
}
img_send(image_base64);
};
}else{
img_send(image_base64);
}
};
reader.readAsDataURL(file);
}
}
/**
*为将图片赋值给消息
**/
functionimg_send(image_base64){
if(image_base64!='data:,'){
$("#send_image_value").val(image_base64);
send_msg();
$("#showLoadingimg").hide();
$('#sendImage').val("");
}
}
开始时,toDataURL获取的值是data:,
$("#send_image_value").val(image_base64);
send_msg();
这两句写在
reader.onload方法的最下面这就导致图片并没有压缩
因为img.onload还没执行完
发送的还是原来的图片
在调整后就可以实现图片的压缩了
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。