好像沒啥好說的~html
//html <input type="file" id="file"> //這裏選擇圖片 <canvas id="canvas"></canvas> //canvas畫布
//js document.getElementById('file').onchange = function () { console.log(this.files[0]); //注意這個files是數組 reader.readAsDataURL(this.files[0]); var reader = new FileReader(); reader.onload = function (e) { //下面這三行就能夠實現文件選擇了圖片之後,預覽的功能,可是有些圖片可能太大了影響頁面觀感,得統一縮小下。 //var img = new Image(); // img.src = e.target.result; // document.body.appendChild(img); render(e.target.result) //這個方法實現圖片的壓縮下載 } }
var MAX_H = 100; function render(src){ // 建立一個 Image 對象 var image = new Image(); // 設置src屬性,加載圖片內容,此時還未壓縮 image.src = src; // 綁定 load 事件處理器,加載完成後執行 image.onload = function(){ // 獲取 canvas DOM 對象 var canvas = document.getElementById("canvas"); // 若是高度超標 if(image.height > MAX_H) { // 寬度等比例縮放 *= image.width *= MAX_H / image.height; image.height = MAX_H; } // 獲取 canvas的 2d 環境對象, 有些上古瀏覽器不支持canvas var ctx = canvas.getContext("2d"); // canvas清屏 ctx.clearRect(0, 0, canvas.width, canvas.height); // 把canvas寬高設置爲圖片寬高 canvas.width = image.width; canvas.height = image.height; // 將圖像繪製到canvas上 //drawImage(img,startX,startY,endX,endY) ctx.drawImage(image, 0, 0, image.width, image.height); //將繪製好的canvas圖像轉爲DataURL //toDataURL(圖片類型,圖片質量),這個圖片質量越高就越清晰(相同寬高) //canvas.toDataURL 返回的默認格式就是 image/png var data = canvas.toDataURL('image/jpeg',0.5); //獲取圖片的dataUrl轉成blob //這下面轉blob的代碼我也沒搞懂,無百度了DataURL轉blob就是這些代碼了 data = data.split(',')[1]; data = window.atob(data); var ia = new Uint8Array(data.length); for (var i = 0; i < data.length; i++) { ia[i] = data.charCodeAt(i); }; var blob = new Blob([ia], { type: "image/jpeg" }); //生成blob文件的下載連接,把連接附在a便籤上,把a便籤加入dom中,點擊就能夠下載啦 var url3 = URL.createObjectURL(blob); var a = document.createElement('a'); a.href = url3; a.text = '測試圖片'; a.download = 'mytest.jpg'; document.body.appendChild(a); }; };
壓縮後上傳的操做,這裏就不寫了,百度下blob如何生成file上傳便可。canvas