欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于JS實(shí)現(xiàn)前端壓縮上傳圖片的實(shí)例代碼

 更新時(shí)間:2019年05月14日 10:52:42   作者:cheee  
這篇文章主要介紹了基于JS實(shí)現(xiàn)前端壓縮上傳圖片的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下

具體代碼如下所示:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>前端壓縮上傳圖片</title>
  <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
  <input type="file" id="picFile" onchange="readFile(this)" />
  <img id="img" src="" alt="" />
  <script>
    function readFile(obj) {
      var file = obj.files[0];
      //判斷類型是不是圖片 
      if (!/image\/\w+/.test(file.type)) {
        alert("請(qǐng)確保文件為圖像類型");
        return false;
      }
      var reader = new FileReader();
      reader.readAsDataURL(file);
      reader.onload = function(e) {
        dealImage(this.result, { quality: 0.5 }, function(base) {
          //調(diào)用
          var blob = dataURLtoBlob(base);
          var newFile = new File([blob], file.name, { type: file.type });
          console.log(newFile)
          let r = new FileReader(); //本地預(yù)覽
          r.onload = function() {
            $('#img').attr("src", r.result);;
          }
          r.readAsDataURL(newFile); //Base64
          // upload(newFile);
        });
      }
    }
    //將base64轉(zhuǎn)換為blob
    function dataURLtoBlob(dataurl) {
      var arr = dataurl.split(','),
        mime = arr[0].match(/:(.*?);/)[1],
        bstr = atob(arr[1]),
        n = bstr.length,
        u8arr = new Uint8Array(n);
      while (n--) {
        u8arr[n] = bstr.charCodeAt(n);
      }
      return new Blob([u8arr], { type: mime });
    }
    function upload(file) {
      var that = this;
      // 創(chuàng)建form對(duì)象
      let param = new FormData();
      // 通過(guò)append向form對(duì)象添加數(shù)據(jù)
      param.append('img', file);
      // 文件大小
      param.append('size', file.size);
      for (var n in that.params) {
        param.append(n, that.params[n]);
      }
      // 創(chuàng)建ajax
      var xhr = new XMLHttpRequest();
      xhr.onload = function() {
        console.log(xhr.responseText)
      }
      xhr.open("POST", "yourapi", true);
      // 發(fā)送表單數(shù)據(jù)
      xhr.send(param);
    }
    /**
     * 圖片壓縮,默認(rèn)同比例壓縮
     * @param {Object} path
     * pc端傳入的路徑可以為相對(duì)路徑,但是在移動(dòng)端上必須傳入的路徑是照相圖片儲(chǔ)存的絕對(duì)路徑
     * @param {Object} obj
     * obj 對(duì)象 有 width, height, quality(0-1)
     * @param {Object} callback
     * 回調(diào)函數(shù)有一個(gè)參數(shù),base64的字符串?dāng)?shù)據(jù)
     */
    function dealImage(path, obj, callback) {
      var img = new Image();
      img.src = path;
      img.onload = function() {
        var that = this;
        // 默認(rèn)按比例壓縮
        var w = that.width,
          h = that.height,
          scale = w / h;
        w = obj.width || w;
        h = obj.height || (w / scale);
        var quality = obj.quality || 0.7; // 默認(rèn)圖片質(zhì)量為0.7
        //生成canvas
        var canvas = document.createElement('canvas');
        var ctx = canvas.getContext('2d');
        // 創(chuàng)建屬性節(jié)點(diǎn)
        var anw = document.createAttribute("width");
        anw.nodeValue = w;
        var anh = document.createAttribute("height");
        anh.nodeValue = h;
        canvas.setAttributeNode(anw);
        canvas.setAttributeNode(anh);
        ctx.drawImage(that, 0, 0, w, h);
        // 圖像質(zhì)量
        if (obj.quality && obj.quality <= 1 && obj.quality > 0) {
          quality = obj.quality;
        }
        // quality值越小,所繪制出的圖像越模糊
        var base64 = canvas.toDataURL('image/jpeg', quality);
        // 回調(diào)函數(shù)返回base64的值
        callback(base64);
      }
    }
  </script>
</body>
</html>

總結(jié)

以上所述是小編給大家介紹的基于JS實(shí)現(xiàn)前端壓縮上傳圖片的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • JS如何循環(huán)遍歷JSON數(shù)據(jù)

    JS如何循環(huán)遍歷JSON數(shù)據(jù)

    這篇文章主要介紹了JS如何循環(huán)遍歷JSON數(shù)據(jù)的方法,本文提供了 JS 循環(huán) JSON 數(shù)據(jù)列,以及 JS 循環(huán)遍歷 JSON 數(shù)據(jù)的例子,需要的朋友可以參考下
    2024-01-01
  • 詳解uniapp的全局變量實(shí)現(xiàn)方式

    詳解uniapp的全局變量實(shí)現(xiàn)方式

    這篇文章主要介紹了詳解uniapp的全局變量實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • 深入理解ES6的迭代器與生成器

    深入理解ES6的迭代器與生成器

    本篇文章主要介紹了深入理解ES6的迭代器與生成器,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • js實(shí)現(xiàn)手機(jī)web圖片左右滑動(dòng)效果

    js實(shí)現(xiàn)手機(jī)web圖片左右滑動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)手機(jī)web圖片左右滑動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • JavaScript實(shí)現(xiàn)動(dòng)態(tài)表格的方法詳解

    JavaScript實(shí)現(xiàn)動(dòng)態(tài)表格的方法詳解

    這篇文章主要為大家介紹了JavaScript實(shí)現(xiàn)動(dòng)態(tài)表格的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • 微信小程序復(fù)選框組件使用詳解

    微信小程序復(fù)選框組件使用詳解

    這篇文章主要為大家詳細(xì)介紹了微信小程序復(fù)選框組件使用,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 輕松理解JavaScript閉包

    輕松理解JavaScript閉包

    閉包機(jī)制是JavaScript的重點(diǎn)和難點(diǎn),本文希望能幫助大家輕松的學(xué)習(xí)閉包。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • JS實(shí)現(xiàn)iframe自適應(yīng)高度的方法(兼容IE與FireFox)

    JS實(shí)現(xiàn)iframe自適應(yīng)高度的方法(兼容IE與FireFox)

    這篇文章主要介紹了JS實(shí)現(xiàn)iframe自適應(yīng)高度的方法,涉及javascript與iframe交互動(dòng)態(tài)操作頁(yè)面元素屬性的相關(guān)技巧,需要的朋友可以參考下
    2016-06-06
  • js 靜態(tài)HTML表格排序功能實(shí)現(xiàn)

    js 靜態(tài)HTML表格排序功能實(shí)現(xiàn)

    對(duì)于對(duì)于一些表格按價(jià)格 等進(jìn)行排序,方便用戶對(duì)當(dāng)前頁(yè)面的高低價(jià)格排序,用戶體驗(yàn)性好
    2009-02-02
  • JS字符串拼接的幾種方式(最新推薦)

    JS字符串拼接的幾種方式(最新推薦)

    在 JavaScript 中,使用字符串連接有 幾 種方式:連接符(+)、反引號(hào)(`)、join()、concat(),這篇文章主要介紹了JS字符串拼接的幾種方式,需要的朋友可以參考下
    2023-01-01

最新評(píng)論