您好,登錄后才能下訂單哦!
本篇內容主要講解“怎么用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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。