您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“怎么用HTML5的canvas實(shí)現(xiàn)圖片壓縮”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“怎么用HTML5的canvas實(shí)現(xiàn)圖片壓縮”吧!
代碼如下:
<!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(){
//實(shí)現(xiàn)的原理的newformData()然后把這個(gè)formData用ajax傳進(jìn)去
span.innerHTML='預(yù)覽圖加載中...'
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)
/*第一個(gè)參數(shù)是創(chuàng)建的img對(duì)象;第二個(gè)參數(shù)是左上角坐標(biāo),后面兩個(gè)是畫布區(qū)域?qū)捀?/
//壓縮后的圖片base64url
/*canvas.toDataURL(mimeType,qualityArgument),mimeType默認(rèn)值是'image/jpeg';
*qualityArgument表示導(dǎo)出的圖片質(zhì)量,只要導(dǎo)出為jpg和webp格式的時(shí)候此參數(shù)才有效果,默認(rèn)值是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)//默認(rèn)true為異步
//上傳進(jìn)度
xhr.upload.addEventListener('progress',function(e){
console.log('上傳進(jìn)度為:'+(e.loaded/e.total*100).toFixed(2)+'%')//多次出現(xiàn)
//event.total是需要傳輸?shù)目傋止?jié),event.loaded是已經(jīng)傳輸?shù)淖止?jié)
})
xhr.upload.addEventListener('loadstart',function(){
console.log('上傳開始')//只出現(xiàn)一次
})
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:*");以實(shí)現(xiàn)跨域
到此,相信大家對(duì)“怎么用HTML5的canvas實(shí)現(xiàn)圖片壓縮”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。