input上傳圖片多圖片壓縮

upImgCompression(event){   // event:必傳change的event
		// 壓縮圖片須要的一些元素和對象
	      
	      var imgArr = [];
	      // 縮放圖片須要的canvas
	      var canvas = document.createElement('canvas');
	      var context = canvas.getContext('2d');
	      // 選擇的文件對象
	      var file = event.target.files;
	      for(let i = 0;i<file.length;i++){

	      	  var reader = new FileReader(),
	      	  	  imgFile = file[i];
		      // 選擇的文件是圖片
		      if(imgFile.type.indexOf("image") == 0) {
		          reader.readAsDataURL(imgFile);
		      }else{
			      continue;
		      }
  	          let img = new Image();
		      // 文件base64化,以便獲知圖片原始尺寸
		      reader.onload = function(e) {
		          img.src = e.target.result;
		      };
		      var imgP = new Promise(function  (resolve,reject) {
	    		      // base64地址圖片加載完畢後
				      img.onload = function() {
				          // 圖片原始尺寸
				          var originWidth = this.width;
				          var originHeight = this.height;
				          // 最大尺寸限制
				          var maxWidth = 400,
				              maxHeight = 400;
				          // 目標尺寸
				          var targetWidth = originWidth,
				              targetHeight = originHeight;
				          // 圖片尺寸超過400x400的限制
				          if(originWidth > maxWidth || originHeight > maxHeight) {
				              if(originWidth / originHeight > maxWidth / maxHeight) {
				                  // 更寬,按照寬度限定尺寸
				                  targetWidth = maxWidth;
				                  targetHeight = Math.round(maxWidth * (originHeight / originWidth));
				              } else {
				                  targetHeight = maxHeight;
				                  targetWidth = Math.round(maxHeight * (originWidth / originHeight));
				              }
				          }
				          // canvas對圖片進行縮放
				          canvas.width = targetWidth;
				          canvas.height = targetHeight;
				          // 清除畫布
				          context.clearRect(0, 0, targetWidth, targetHeight);
				          // 圖片壓縮
				          context.drawImage(img, 0, 0, targetWidth, targetHeight);
				          var base64 = canvas.toDataURL("image/png",0.8);
				          
				          resolve(base64);
				      };
			  });

			  imgArr.push(imgP);

		  }
		return Promise.all(imgArr);
	}

  

<input type="file" multiple accept="image/*" onchange="handleImgUpload"/>
// 使用方法 upImgCompression(event).then(res=>{ // 結果 console.log(res); })

  

 

 

 

常常遇到多圖片上傳,而後轉成base64。在不壓縮的狀況下會特別的大。由於常常用我就簡單的封裝下,圖片壓縮成功之後會轉成base64並放到數組裏面返回。javascript

由於是用es6寫的須要babel轉成es5瀏覽器才能支持。java

相關文章
相關標籤/搜索