本篇内容主要讲解“怎么用HTML5的canvas实现图片压缩”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用HTML5的canvas实现图片压缩”吧!
代码如下:
<!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:*");以实现跨域
到此,相信大家对“怎么用HTML5的canvas实现图片压缩”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。