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

使用JavaScript下載圖片并保存到本地的詳細(xì)解釋和代碼示例

 更新時間:2024年07月12日 09:01:24   作者:zero笨小孩  
在前端開發(fā)中經(jīng)常會遇到需要將圖片從網(wǎng)絡(luò)上下載并保存到本地的需求,這篇文章主要給大家介紹了關(guān)于使用JavaScript下載圖片并保存到本地的詳細(xì)解釋和代碼示例,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

在前端開發(fā)中,經(jīng)常會遇到需要將圖片從網(wǎng)絡(luò)上下載并保存到本地的需求。本文將介紹如何使用 JavaScript 實現(xiàn)下載圖片的功能,并提供詳細(xì)的解釋和代碼示例。

1. downloadImage 函數(shù)

首先,讓我們來了解 downloadImage 函數(shù)的實現(xiàn)原理和作用。這個函數(shù)的主要功能是接收圖片的 URL 和要保存的文件名,然后在用戶點擊下載鏈接時將圖片保存到本地。

function downloadIamge(src, imgName){?
    let image = new Image();?
    image.src = src;?
    image.setAttribute("crossOrigin", "anonymous");?
    image.onload = function() {?
        let c = document.createElement("canvas");?
        c.width = image.width;?
        c.height = image.height;?
        c.getContext("2d").drawImage(image, 0, 0, image.width, image.height);?
        let a = document.createElement("a"); ?
        a.download = imgName;?
        a.href = c.toDataURL("image/png");?
        a.click();?
    }?
}

2. 實現(xiàn)原理解釋

  • 首先,創(chuàng)建一個新的 Image 對象,并將圖片的 URL 賦值給它。
  • 通過設(shè)置 crossOrigin 屬性為 "anonymous",解決跨域訪問的問題。
  • 當(dāng)圖片加載完成后,創(chuàng)建一個新的 canvas 元素,并將圖片繪制到 canvas 上。
  • 創(chuàng)建一個新的 <a> 元素作為下載鏈接,并設(shè)置下載的文件名為 imgName。
  • 將 canvas 的數(shù)據(jù)轉(zhuǎn)換為 Data URL,并將其賦值給下載鏈接的 href 屬性。
  • 最后,模擬用戶點擊下載鏈接,觸發(fā)圖片下載的操作。

3. 使用示例

下面是一個使用示例,展示了如何調(diào)用 downloadImage 函數(shù)下載圖片到本地:

const imageUrl = "https://example.com/image.jpg";
const imageName = "myImage.jpg";
downloadImage(imageUrl, imageName);

4. 注意事項

  • 確保圖片的 URL 是有效的,并且具有足夠的權(quán)限允許跨域訪問。
  • 如果圖片來自其他域名,請確保在服務(wù)器端設(shè)置了正確的跨域資源共享(CORS)配置。

通過本文的介紹,你現(xiàn)在應(yīng)該了解如何使用 JavaScript 下載圖片并保存到本地。這個方法非常實用,可以幫助你在前端開發(fā)中處理各種圖片下載需求。

附:多個下載

前端下載的實際操作是由瀏覽器來處理的。當(dāng)用戶點擊下載鏈接或者通過JavaScript觸發(fā)文件下載時,瀏覽器會負(fù)責(zé)發(fā)起文件下載請求,并將文件保存到用戶的本地計算機(jī)中。瀏覽器會處理文件下載的所有細(xì)節(jié),包括網(wǎng)絡(luò)請求、接收文件數(shù)據(jù)、保存文件等操作。

所以一般情況下,我們要下載多個文件,只需要循環(huán)向瀏覽器提交下載任務(wù)就可以了。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
    <button>點擊下載多個圖片</button>
    <script>
      const srcList = [
        'https://fuss10.elemecdn.com/a/3f/3302e58f9a181d2509f3dc0fa68b0jpeg.jpeg',
        'https://fuss10.elemecdn.com/1/34/19aa98b1fcb2781c4fba33d850549jpeg.jpeg',
        'https://fuss10.elemecdn.com/0/6f/e35ff375812e6b0020b6b4e8f9583jpeg.jpeg',
        'https://fuss10.elemecdn.com/9/bb/e27858e973f5d7d3904835f46abbdjpeg.jpeg',
        'https://fuss10.elemecdn.com/d/e6/c4d93a3805b3ce3f323f7974e6f78jpeg.jpeg',
        'https://fuss10.elemecdn.com/3/28/bbf893f792f03a54408b3b7a7ebf0jpeg.jpeg',
        'https://fuss10.elemecdn.com/2/11/6535bcfb26e4c79b48ddde44f4b6fjpeg.jpeg',
        ]
      // 獲取button標(biāo)簽
      const bt = document.querySelector('button')
      // 給button添加點擊事件 
      bt.addEventListener('click',downloadMany(srcList))

      //下載多個
      function downloadMany(srcList){
          return function() {
              srcList.forEach((url,index)=>{
               //循環(huán)調(diào)用download函數(shù)下載
              download(url,index+'png')
            })
          }
      }
      //下載函數(shù)
      function download(url,fileName){
            //圖片的地址 
            fetch(url)
              // 獲取 blob 對象
              .then(res=>res.blob())
              .then(blob=>{
                // 創(chuàng)建a標(biāo)簽
                var link = document.createElement('a');
                // 設(shè)置a標(biāo)簽為不可見
                link.style.display = 'none';
                // 將a標(biāo)簽添加到body
                document.body.appendChild(link);
                // 生成Blob URL并設(shè)置給a標(biāo)簽的href屬性
                var url = window.URL.createObjectURL(blob);
                link.href = url;
                // 設(shè)置a標(biāo)簽的download
                link.download = fileName;
                // 模擬點擊事件進(jìn)行下載
                link.click();
                //下載完成后清理URL對象和a標(biāo)簽
                window.URL.revokeObjectURL(url);
                document.body.removeChild(link); 
              })
      }

    </script>
</body>
</html>

注意:URL.createObjectURL 生成的url如果過多會有效率問題,可以在合適的時機(jī)(download后)釋放掉。

到此這篇關(guān)于使用JavaScript下載圖片并保存到本地的文章就介紹到這了,更多相關(guān)JS下載圖片并保存到本地內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaScript 七大技巧(二)

    JavaScript 七大技巧(二)

    我寫JavaScript代碼已經(jīng)很久了,都記不起是什么年代開始的了。本文給大家分享javascript七大技巧(二),對javascript技巧相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • laypage分頁控件使用實例詳解

    laypage分頁控件使用實例詳解

    這篇文章主要為大家詳細(xì)分享了laypage分頁控件使用實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 深入淺出理解javaScript原型鏈

    深入淺出理解javaScript原型鏈

    這篇文章主要介紹了對javaScript原型鏈的理解,以實例形式對javaScript原型鏈的概念及相關(guān)使用技巧做了較為淺顯易懂的分析,需要的朋友可以參考下
    2015-05-05
  • 淺談微信小程序列表埋點曝光指南

    淺談微信小程序列表埋點曝光指南

    這篇文章主要介紹了微信小程序列表埋點曝光指南,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Javascript 函數(shù)parseInt()轉(zhuǎn)換時出現(xiàn)bug問題

    Javascript 函數(shù)parseInt()轉(zhuǎn)換時出現(xiàn)bug問題

    天測試的測出來的。parseInt(1.13*100),實際返回值是112,下面有個示例,大家可以看看下
    2014-05-05
  • JavaScript中一些特殊的字符運算

    JavaScript中一些特殊的字符運算

    這篇文章主要介紹了JavaScript中一些特殊的字符運算的相關(guān)資料,需要的朋友可以參考下
    2017-08-08
  • 純js實現(xiàn)html轉(zhuǎn)pdf的簡單實例(推薦)

    純js實現(xiàn)html轉(zhuǎn)pdf的簡單實例(推薦)

    下面小編就為大家?guī)硪黄僯s實現(xiàn)html轉(zhuǎn)pdf的簡單實例(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • JS文本獲得焦點清除文本文字的示例代碼

    JS文本獲得焦點清除文本文字的示例代碼

    本篇文章主要是對JS文本獲得焦點清除文本文字的示例代碼進(jìn)行介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • 詳解自定義ajax支持跨域組件封裝

    詳解自定義ajax支持跨域組件封裝

    本篇文章給大家詳細(xì)分析了自定義ajax支持跨域組件封裝相關(guān)的知識點,對此有興趣的朋友參考學(xué)習(xí)下。
    2018-02-02
  • JavaScript async/await原理及實例解析

    JavaScript async/await原理及實例解析

    這篇文章主要介紹了JavaScript async/await原理及實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12

最新評論