亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用HTML5實現圖片壓縮上傳的案例

發布時間:2020-10-24 17:20:12 來源:億速云 閱讀:213 作者:小新 欄目:web開發

這篇文章主要介紹了利用HTML5實現圖片壓縮上傳的案例,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

實現流程:
  • 獲取<input type="file">上傳的文件;

  • 使用FileReader讀取圖片,并新建一個Image對象將FileReader讀取的圖片數據放進去;

  • 使用canvas將Image對象等比縮放并寫入到畫布中,保存為base64格式的數據(這里使用的是FormData對象上傳,其實這里已經可以直接將base64的數據通過ajax使用post方法上傳到服務器,即可避免下面兩個步驟);

  • 新建一個Blob對象將base64數據放入;

  • 使用FormData對象上傳到第三方云儲存服務器;

使用HTML原生<input type="file">上傳圖片,下面是踩的一些小坑:
  • accept設定上傳文件的類型,這里直接用image/*,不指定具體的后綴名,否則部分安卓手機下無法上傳圖片;

  • 添加multiple屬性可選取多張圖片(本例只做選取單張圖片);

  • capture="camera"屬性可以調用攝像頭(添加此屬性在iPhone下會直接調用攝像頭,而不會讀取相冊;且目前安卓和ios設備使用accept="image/*"均可選擇使用攝像頭拍照還是使用相冊的圖片,所以該屬性可以忽略)。

<input id="imgUpload" type="file" onchange="addPic" accept="image/*" />
當input文件觸發change事件后獲取上傳的文件
function addPic(e){
  if (typeof FileReader === 'undefined') {
    return alert('你的瀏覽器不支持上傳圖片喲!');
  }
  var files = e.target.files || e.dataTransfer.files;
  if(files.length > 0){
    imgResize(file[0], callback);
  }
}
使用FileReader獲取圖片數據,并使用canvas壓縮
  • ios手機拍照會旋轉90度,這里必須判斷是否ios手機做出相應處理后再上傳

function imgResize(file, callback){
  var fileReader = new FileReader();
  fileReader.onload = function(){
    var IMG = new Image();
    IMG.src = this.result;
    IMG.onload = function(){
      var w = this.naturalWidth, h = this.naturalHeight, resizeW = 0, resizeH = 0;
      // maxSize 是壓縮的設置,設置圖片的最大寬度和最大高度,等比縮放,level是報錯的質量,數值越小質量越低
      var maxSize = {
        width: 500,
        height: 500,
        level: 0.6
      };
      if(w > maxSize.width || h > maxSize.height){
        var multiple = Math.max(w / maxSize.width, h / maxSize.height);
        resizeW = w / multiple;
        resizeH = w / multiple;
      } else {
        // 如果圖片尺寸小于最大限制,則不壓縮直接上傳
        return callback(file)
      }
      var canvas = document.createElement('canvas'),
      ctx = canvas.getContext('2d');
      if(window.navigator.userAgent.indexOf('iPhone') > 0){
        canvas.width = resizeH;
        canvas.height = resizeW;
        ctx.rorate(90 * Math.PI / 180);
        ctx.drawImage(IMG, 0, -resizeH, resizeW, resizeH);
      }else{
        canvas.width = resizeW;
        canvas.height = resizeH;
        ctx.drawImage(IMG, 0, 0, resizeW, resizeH);
      }
      var base64 = canvas.toDataURL('image/jpeg', maxSize.level);
      convertBlob(window.atob(base64.split(',')[1]), callback);
    }
  };
  fileReader.readAsDataURL(file);
}
將base64的數據轉換成一個Blob對象
  • 安卓手機不支持Blob構造方法

function convertBlob(base64, callback){
  var buffer = new ArrayBuffer(base64.length);
  var ubuffer = new Uint8Array(buffer);
  for (var i = 0; i < base64.length; i++) {
    ubuffer[i] = base64.charCodeAt(i)
  }
  var blob;
  try {
    blob = new Blob([buffer], {type: 'image/jpg'});
  } catch (e) {
    window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;
    if(e.name === 'TypeError' && window.BlobBuilder){
      var blobBuilder = new BlobBuilder();
      blobBuilder.append(buffer);
      blob = blobBuilder.getBlob('image/jpg');
    }
  }
  callback(blob)
}
使用HTML5的FormData對象上傳數據
function callback(fileResize){
  var data = new FormData();
  data.append('file', fileResize);
  var config = {
    headers: {'Content-Types': 'multipart/form-data'}
  };
  // 這里用的es6語法發起請求,可以無視
  axios.post(url, data, config).then().catch(e){}
}

感謝你能夠認真閱讀完這篇文章,希望小編分享利用HTML5實現圖片壓縮上傳的案例內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南川市| 南宫市| 抚州市| 天峨县| 蚌埠市| 外汇| 商河县| 孟村| 九台市| 龙川县| 宝鸡市| 正定县| 鄂托克旗| 项城市| 偏关县| 长海县| 响水县| 玉环县| 克什克腾旗| 东乡族自治县| 宁武县| 芷江| 揭西县| 明光市| 霍林郭勒市| 外汇| 临沧市| 江永县| 房产| 通山县| 张北县| 昌都县| 依兰县| 赤水市| 海林市| 商城县| 珲春市| 大港区| 怀远县| 建宁县| 石城县|