CANVAS運用-對圖片的壓縮上傳(僅針對行動瀏覽器)

來源:互聯網
上載者:User

標籤:

最近在移動端設計頭像上傳功能時,原本是以<input type="file">直接通過formData上傳,然而實際使用方式是:對於過大的圖片(高像素手機所拍攝的照片等)上傳時間過長會導致上傳失敗,而每次都上傳原始大小的圖片(幕後處理壓縮)十分影響使用者體驗,所以研究了一下通過canvas壓縮圖片並上傳的方法,以下是整理的一些思路和心得:

一、<input type="file">擷取本地圖片,並將圖片繪製到畫布中。此處的痛點在於:由於瀏覽器的保護機制,無法直接擷取到本地檔案的圖片路徑,所以需要將本地圖片編譯成base64格式再做上傳,代碼如下:

var result = document.getElementById("/* 出錯資訊顯示塊 */");var input = document.getElementById("/* 上傳檔案標籤 */");if(typeof FileReader === ‘undefined‘){  result.innerHTML = "<p class=‘warn‘>抱歉,你的瀏覽器不支援 FileReader</p>";  input.setAttribute(‘disabled‘,‘disabled‘);}else{  input.addEventListener(‘change‘,readFile,false);}function readFile(){  var file = this.files[0];  if(!/image\/\w+/.test(file.type)){    alert("請確保檔案為映像類型");    return false;  }  var reader = new FileReader();  reader.readAsDataURL(file);  reader.onload = function(e){    //  this.result 編譯後的映像編碼,可直接用src顯示  }}

二、映像在canvas中的處理

var c=document.getElementById("/* canvas標籤的id */");var cxt=c.getContext("2d");var img=new Image();img.src=/* 擷取的圖片編碼地址 */;var width = img.width;var height = img.height;dic = height / width;c.width = 200;  //圖片壓縮的標準,這裡是按照定款200px計算c.height = 200 * dic;cxt.clearRect(0,0,200,200*dic);cxt.drawImage(img,0,0,200,200*dic);var finalURL = c.toDataURL();  //  最終得到的 finalURL 即為壓縮後的圖片編碼,可用來上傳或者直接產生img標籤

這裡需要注意的幾點是:

1、本地調試時會有一個報錯,原因為跨域問題,需要再服務端調試;

2、canvas中的drawImage()方法具備映像剪裁功能,但將映像展開和剪裁同時寫入的話,會優先執行剪裁的方法;

3、使用AJAX上傳映像編碼時,編碼內的加號會被轉成空格上傳導致背景編譯失敗;

4、關於對圖片地區選取項目上傳的方法尚在嘗試階段,後續會補上心得。

CANVAS運用-對圖片的壓縮上傳(僅針對行動瀏覽器)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.