首页 / 知识
HTML5联合canvas实现图片压缩
2023-04-11 15:17:00
<!DOCTYPEhtml>
<html>
<head>
<metacharset="UTF-8">
<metaname='viewport'content='width=device-width,initial-scale=1,maximum-scale=1'>
<title>lianxi</title>
<styletype="text/css">
</style>
</head>
<body>
<form>
名字:<inputtype="text"name='username'id='username'/>
上传:<inputtype="file"name='fileimage'id='fileimage'/>
</form>
<button>button</button>
<script>
varfile=document.querySelector('#fileimage')
varusername=document.querySelector('#username')
varcanvas=document.createElement('canvas');
varspan=document.createElement('span')
varformData=newFormData()
file.addEventListener('change',function(){
//实现的原理的newformData()然后把这个formData用ajax传进去
span.innerHTML='预览图加载中...'
document.body.appendChild(span)
console.log(file.files[0])
username.value?formData.append('username',username.value):null;
resize(file.files[0]);
})
//上传前的图片压缩
functionresize(file){
varreader=newFileReader()
reader.readAsDataURL(file)
varimg=newImage()
reader.onload=function(e){
//this.result就是图片的base64地址信息
img.src=this.result;
}
varcontext=canvas.getContext('2d');
vargif=document.createElement('img')
//base64地址图片加载完毕后
img.onload=function(){
//图片原始尺寸
//定义画布的大小
if(img.width>300||img.height>300){
if(img.width>img.height){
canvas.width=300
canvas.height=img.height/img.width*300
}
else{
canvas.height=300
canvas.width=img.width/img.height*300
}
}
//从那里开始截取图片
context.drawImage(img,0,0,canvas.width,canvas.height)
/*第一个参数是创建的img对象;第二个参数是左上角坐标,后面两个是画布区域宽高*/
//压缩后的图片base64url
/*canvas.toDataURL(mimeType,qualityArgument),mimeType默认值是'image/jpeg';
*qualityArgument表示导出的图片质量,只要导出为jpg和webp格式的时候此参数才有效果,默认值是0.92*/
//varnewUrl=canvas.toDataURL('image/jpeg',0.92);//base64格式
document.body.removeChild(span)
document.querySelector('body').appendChild(canvas)
};
}
//这是上传的
document.querySelector('button').addEventListener('click',function(){
canvas.toBlob(function(blob){
varxhr=newXMLHttpRequest()
formData.append('fileimage',blob,'002.webp')
xhr.open('POST','test.php',true)//默认true为异步
//上传进度
xhr.upload.addEventListener('progress',function(e){
console.log('上传进度为:'+(e.loaded/e.total*100).toFixed(2)+'%')//多次出现
//event.total是需要传输的总字节,event.loaded是已经传输的字节
})
xhr.upload.addEventListener('loadstart',function(){
console.log('上传开始')//只出现一次
})
xhr.onreadystatechange=function(){
if(xhr.readyState===4){
if(xhr.status>=200&&xhr.status<300||xhr.status==304){
console.log(JSON.parse(xhr.responseText))//成功后的返回值
}
else{
console.log("Requestwasunsuccessful:"+xhr.status);
}
}
}
//xhr.setRequestHeader("Content-type","multipart/form-data");
xhr.send(formData)
},'image/webp',0.9)
})
</script>
</body>
</html>
需要注意的是后端需要加上header("Access-Control-Allow-Origin:*");以实现跨域
本文转载自中文网 |
最新内容
相关内容
Python如何实现excel筛选
Python如何实现excel筛选,数据,培训,表示,缺失,表格,示例,模块,手工,以上,标签,python实现筛选Excel数据可以使用pandas库来实现,具体的使用示python将列表压缩
python将列表压缩,培训,代码,函数,列表,对象,元素,两个,上面,长度,功能,如何将python列表压缩zip()函数可以把两个列表“压缩”成一个zip对象python实现线程安全的单例模式
python实现线程安全的单例模式,培训,线程,模式,python如何实现继承
python如何实现继承,培训,概念,名称,方法,定义,个人,属性,接口,过程,能力,python实现继承的方法:通过继承创建的新类称为“子类”或“派生类”python生成器如何实现
python生成器如何实现,数据,培训,生成器,函数,程序,语句,方法,定义,外部,功能,python生成器实现方法:生成器和迭代器的功能非常相似,它也会提供python如何保存图片
python如何保存图片,图片,数字,软件,系统,代码,培训,价格,发展,5G,以上,一提到数字图像处理,可能大多数人就会想到matlab,但matlab也有自身的缺python如何实现对Python中列表的排
python如何实现对Python中列表的排序?,培训,工作,实例,方法,关键字,对象,函数,以上,列表,表达式,对List进行排序,Python提供了两个方法方法1.python怎么将图片转换成base64编码
python怎么将图片转换成base64编码,培训,图片,数据,数字,字符串,字符,接口,模块,功能,方法,该模块提供了基于rfc3548的Base16,32,64编解码的python怎么实现模式匹配
python怎么实现模式匹配,培训,时间,代码,算法,字符,模式,复杂度,向量,空间,两个,python通过BF算法实现关键词匹配,BF算法,即暴风(BruteForce)算pythonimport是怎么实现的?
pythonimport是怎么实现的?,培训,模块,文件,变量,里面,内容,路径,函数,顺序,内存,基本概念:模块(module):其实就是一个py文件,里面定义了各种变pythoncanvas画布的介绍
pythoncanvas画布的介绍,培训,数字,单位,画布,对象,都会,组件,实例,属性,以上,pythoncanvas画布的介绍1、在画布上绘制对象,通常用create_xxxxpython静态web服务器如何实现
python静态web服务器如何实现,数据,培训,服务,代码,时间,服务器,静态,报文,浏览器,消息,python静态web服务器如何实现的方法:1、编写TCP服务器