1. 程式人生 > >canvas實現圖片尺寸等比壓縮並轉換為base64字串

canvas實現圖片尺寸等比壓縮並轉換為base64字串

最近公司的一個H5活動,搜狐新聞客戶端開機圖製作,需要使用者上傳一張圖片之後,先顯示出來再進行裁剪,然後上傳base64字串到伺服器上。
但是問題來了,使用者一般上傳的圖片檔案的大小都在3-5M左右,轉成base64後提交給伺服器的話實在是太大了,到時上傳到伺服器的時候伺服器超時了(都是淚啊!),所以這裡需要先壓縮下圖片。
偶然間想起來可以用canvas進行圖片壓縮,因為這個H5只是在客戶端的webview中的,而webview又是webkit核心,所以對canvas的支援自然是比較好的,我們就毫無疑問的選擇了用canvas進行壓縮
先上程式碼吧:
  1. var width = img_this.width,height = img_this.height;
  2. var scale = width / height;
  3. width1 = 720;
  4. height1 = parseInt(width1 / scale);
  5. var canvas = $("#cans");
  6. canvas[0].width = width1; canvas[0].height = height1;
  7. var ctx = canvas[0].getContext('2d');
  8. ctx.drawImage(img_this,0,0,width,height,0,0,width1,height1);
  9.   var cropStr = canvas[0].toDataURL("image/jpeg",0.7)
這裡的img_this是一個img物件,首先我們先得到這個圖片的寬高比,然後指定canvas的寬度為720,高度由之前的寬高比來定。這裡指定了canvas的寬度為720後,將圖片畫在canvas裡面後轉成的base64的寬度也會為720。
我們用drawImage方法將圖片的(0,0)座標到(0 + width , 0+ height)座標也就是整張圖片 畫到 canvas(0,0)到(width1,height1)也就是整個canvas內
。然後使用toDataUrl將圖片轉換成jpeg的格式,後面0.7為圖片的壓縮質量,可以理解為壓縮率。不要把圖片壓縮成png,因為壓縮成png後base64的字串可能比不轉換前的長!
就這麼簡單的幾步就實現了對圖片的壓縮,咋樣,方便吧~