js通過(guò)canvas生成圖片縮略圖
現(xiàn)今大部分的網(wǎng)絡(luò)應(yīng)用在上傳圖片的時(shí)候都會(huì)同時(shí)保存幾種尺寸的圖片,專(zhuān)業(yè)術(shù)語(yǔ)也就是生成縮略圖,而對(duì)于生成縮略圖一般做法是通過(guò)后端語(yǔ)言php等來(lái)生成,但是為了給服務(wù)器減壓,我們或許可以從前端來(lái)著手,先生成好不同尺寸的縮略圖,傳給后端,而后端只需要將前端傳過(guò)來(lái)的圖片進(jìn)行存儲(chǔ)就好了。
使用Canvas我們可以輕松生成各種尺寸的圖片,具體實(shí)現(xiàn)如下:
function resizeImage(src,callback,w,h){ var canvas = document.createElement('canvas'), ctx = canvas.getContext('2d'), im = new Image(); w = w || 0, h = h || 0; im.onload = function(){ //為傳入縮放尺寸用原尺寸 !w && (w = this.width); !h && (h = this.height); //以長(zhǎng)寬最大值作為最終生成圖片的依據(jù) if(w !== this.width || h !== this.height){ var ratio; if(w>h){ ratio = this.width / w; h = this.height / ratio; }else if(w===h){ if(this.width>this.height){ ratio = this.width / w; h = this.height / ratio; }else{ ratio = this.height / h; w = this.width / ratio; } }else{ ratio = this.height / h; w = this.width / ratio; } } //以傳入的長(zhǎng)寬作為最終生成圖片的尺寸 if(w>h){ var offset = (w - h) / 2; canvas.width = canvas.height = w; ctx.drawImage(im,0,offset,w,h); }else if(w<h){ var offset = (h - w) / 2; canvas.width = canvas.height = h; ctx.drawImage(im,offset,0,w,h); }else{ canvas.width = canvas.height = h; ctx.drawImage(im,0,0,w,h); } callback(canvas.toDataURL('image/png')); } im.src = src;}
在線實(shí)例地址:http://demo.jb51.net/js/2020/thumbnail/,圖片素材是拿的我們做的一個(gè)相框制作應(yīng)用的截圖,有興趣的朋友可以聯(lián)系我哦,大家一起討論,一起玩。
相關(guān)文章:
1. XML在語(yǔ)音合成中的應(yīng)用2. jscript與vbscript 操作XML元素屬性的代碼3. 不要在HTML中濫用div4. HTML5實(shí)戰(zhàn)與剖析之觸摸事件(touchstart、touchmove和touchend)5. .NET Framework各版本(.NET2.0 3.0 3.5 4.0)區(qū)別6. ASP基礎(chǔ)入門(mén)第四篇(腳本變量、函數(shù)、過(guò)程和條件語(yǔ)句)7. ASP將數(shù)字轉(zhuǎn)中文數(shù)字(大寫(xiě)金額)的函數(shù)8. XML入門(mén)的常見(jiàn)問(wèn)題(三)9. php使用正則驗(yàn)證密碼字段的復(fù)雜強(qiáng)度原理詳細(xì)講解 原創(chuàng)10. HTTP協(xié)議常用的請(qǐng)求頭和響應(yīng)頭響應(yīng)詳解說(shuō)明(學(xué)習(xí))
