Javascript: 通過圖片url擷取圖片blob對象

來源:互聯網
上載者:User
為什麼要這樣做呢?
  1. 無需讓使用者下載圖片後再通過 input file 上傳;
  2. chrome外掛程式可以直接右鍵點擊頁面上的圖片,直接上傳圖片;
  3. 都是為了增加使用者體驗!
思路
  1. 通過ajax請求圖片,得到圖片的位元據
  2. 組合Uint8Array和BlobBuilder,得到圖片的blob對象
  3. 增加fileName和fileType,偽裝成File對象
實現代碼
/** * 將符合位元組流的string轉化成Blob對象 *  * @param {String} data * @return {Blob}  * @api public */function binaryToBlob(data) {    var bb = new BlobBuilder();    var arr = new Uint8Array(data.length);    for(var i = 0, l = data.length; i https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest#Receiving_binary_data    // XHR binary charset opt by Marcus Granado 2006 [http://mgran.blogspot.com]    r.overrideMimeType('text/plain; charset=x-user-defined');    r.send(null);    var blob = binaryToBlob(r.responseText);    blob.name = blob.fileName = url.substring(url.lastIndexOf('/') + 1);    blob.fileType = "image/jpeg"; //"image/octet-stream";    return blob;};/** * 將dataUrl轉化成Blob對象 *  * @param {String} dataurl * @return {Blob}  * @api public */function dataUrlToBlob(dataurl) {    // data:image/jpeg;base64,xxxxxx    var datas = dataurl.split(',', 2);    var blob = binaryToBlob(atob(datas[1]));    blob.fileType = datas[0].split(';')[0].split(':')[1];    blob.name = blob.fileName = 'pic.' + blob.fileType.split('/')[1];    return blob;};
更多閱讀
  • https://developer.mozilla.org/en/DOM/Blob
  • http://www.w3.org/TR/FileAPI/#dfn-Blob
  • https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest#Receiving_binary_data
  • http://www.nihilogic.dk/labs/canvas2image/
有愛

^_^ 希望本文對你有用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.