Js利用Canvas實現(xiàn)圖片壓縮功能
最近做的APP項目涉及到手機(jī)拍照上傳圖片,因為手機(jī)拍照的圖片通常都比較大,所以上傳的時候就會很慢。為此,需要對圖片進(jìn)行壓縮處理來優(yōu)化上傳功能。以下是具體實現(xiàn):
/* * 圖片壓縮 * img 原始圖片 * width 壓縮后的寬度 * height 壓縮后的高度 * ratio 壓縮比率 */ function compress(img, width, height, ratio) { var canvas, ctx, img64; canvas = document.createElement('canvas'); canvas.width = width; canvas.height = height; ctx = canvas.getContext("2d"); ctx.drawImage(img, 0, 0, width, height); img64 = canvas.toDataURL("image/jpeg", ratio); return img64; }
上面是一個圖片壓縮函數(shù),返回 base64 格式的圖片數(shù)據(jù)。 其中壓縮比率取值(0 - 1 之間)越大圖片質(zhì)量越高。建議不要將圖片轉(zhuǎn)為 png 格式,因為轉(zhuǎn)為 png 格式,圖片的 base64 比轉(zhuǎn)為 jpeg 的要長不少。下面是實際調(diào)用:
var image = new Image(); image.src = "/img/test.jpg"; image.onload = function(){ var img64 = compress(image, 500, 400, 0.7); document.getElementById("test").src = img64; }
注意: 壓縮方法的調(diào)用以及圖片src賦值必須放在圖片的 onload 方法里面。因為只有等圖片加載完成后才能進(jìn)行壓縮處理,從而轉(zhuǎn)換為base64 進(jìn)行賦值。 如果放在 onload 方法外面,則可能壓縮代碼無效,或者會生成一張純黑色的圖片。
以上這篇Js利用Canvas實現(xiàn)圖片壓縮功能就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Chrome瀏覽器的alert彈窗禁止再次彈出后恢復(fù)的方法
本文主要介紹了Chrome瀏覽器的alert彈窗禁止再次彈出后恢復(fù)的方法。具有一定的參考價值,下面跟著小編一起來看下吧2016-12-12淺談js圖片前端預(yù)覽之filereader和window.URL.createObjectURL
下面小編就為大家?guī)硪黄獪\談js圖片前端預(yù)覽之filereader和window.URL.createObjectURL。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06JavaScript使用structuredClone實現(xiàn)深拷貝
在JavaScript中,實現(xiàn)深拷貝的方式有很多種,每種方式都有其優(yōu)點和缺點,今天介紹一種原生JavaScript提供的structuredClone實現(xiàn)深拷貝,文中通過代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03微信小程序中button去除默認(rèn)的邊框?qū)嵗a
這篇文章主要介紹了微信小程序中button去除默認(rèn)的邊框的實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值 ,需要的朋友可以參考下2019-08-08Microsfot .NET Framework4.0框架 安裝失敗的解決方法
今天在安裝.NET Framework 4.0,安裝了半天結(jié)果提示未安裝成功,提示原因是服務(wù)未啟動了,error code: (0x80070643), "安裝時發(fā)生嚴(yán)重錯誤 "2013-08-08微信小程序?qū)崿F(xiàn)添加手機(jī)聯(lián)系人功能示例
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)添加手機(jī)聯(lián)系人功能,結(jié)合實例形式分析了微信小程序添加聯(lián)系人的具體步驟,包括布局與邏輯實現(xiàn)技巧,需要的朋友可以參考下2017-11-11