Cropper.js 上傳頭像預(yù)覽并剪切

重點代碼解析

1.圖片預(yù)覽

html代碼塊

  <div align="center" style="padding-top:10px;">
    <input type="file" name="file" id="doc" style="width:150px;"   onchange="javascript:setImagePreview();">
  </div>

js代碼塊

    //下面用于圖片上傳預(yù)覽功能
    function setImagePreview(avalue) {
      var docObj = document.getElementById("doc");
      console.log(docObj.files)
      var imgObjPreview = document.getElementById("image");
      if (docObj.files && docObj.files[0]) {
        火狐下,直接設(shè)img屬性
        imgObjPreview.style.display = 'block';
        imgObjPreview.style.maxWidth = '960px';
        imgObjPreview.style.height = '400px';
        //imgObjPreview.src = docObj.files[0].getAsDataURL();
        // 取絕對路徑的getAsDataURL
        //火狐7以上版本不能用上面的getAsDataURL()方式獲取,需要一下方式
        imgObjPreview.src = window.URL.createObjectURL(docObj.files[0]);
      } else {
        //IE下,使用濾鏡
        docObj.select();
        var imgSrc = document.selection.createRange().text;
        var localImagId = document.getElementById("localImag");
        //必須設(shè)置初始大小
        localImagId.style.maxWidth = "960px";
        localImagId.style.height = 'auto';
        //圖片異常的捕捉,防止用戶修改后綴來偽造圖片
        try {
          localImagId.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";     localImagId.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc;
        } catch (e) {
          alert("您上傳的圖片格式不正確,請重新選擇!");
          return false;
        }
        imgObjPreview.style.display = 'none';
        document.selection.empty();
      }
      return true;
    }

2.canvas toDataURL 轉(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
        });
      }
    });

3.發(fā)送Aiax請求

 button2.onclick = function () {
      var fd = new FormData();
      fd.append("image", blob, "image.png");
      var xhr = new XMLHttpRequest();
      xhr.open('POST', '/personal/upload', true);
      xhr.send(fd);
    }
所有代碼

demo地址:demo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,725評論 25 709
  • 太長了,還是轉(zhuǎn)載吧...今天在看博客的時候,無意中發(fā)現(xiàn)了@Trinea在GitHub上的一個項目Android開源...
    龐哈哈哈12138閱讀 20,383評論 3 283
  • 今天,在課間的十分鐘時間里,我緩解一下上課時的緊張情緒,看著窗外。 真好!我一直為自己能有這樣的選擇而高興不已。開...
    葉千尋閱讀 374評論 0 0
  • 2008-10-26 17:08 窗外的艷陽 透過窗臺有點朦朧 心生涼意 好美的景象 冰封的心火 漸漸平息了 明知...
    歐陽默閱讀 246評論 0 0
  • 直播平臺的發(fā)帖論壇,最有核心競爭力的應(yīng)該還是圍繞主播的話題,可以說除了主播話題外,其他話題如游戲、八卦等都可有可無...
    missly117閱讀 126評論 0 0

友情鏈接更多精彩內(nèi)容