<menu id="ycqsw"></menu><nav id="ycqsw"><code id="ycqsw"></code></nav>
<dd id="ycqsw"><menu id="ycqsw"></menu></dd>
  • <nav id="ycqsw"></nav>
    <menu id="ycqsw"><strong id="ycqsw"></strong></menu>
    <xmp id="ycqsw"><nav id="ycqsw"></nav>
  • js保存圖片到手機相冊怎么保存(js實現下載文件到本地)


    在最近的開發當中,我們需要為img標簽以及canvas動態繪制的圖像提供下載功能,下面是經過探索后我們得出的結果。

    一、Canvas 版本

    // 下載Canvas元素的圖片
    function downloadCanvasIamge(selector, name) {
     // 通過選擇器獲取canvas元素
     var canvas = document.querySelector(selector)
     // 使用toDataURL方法將圖像轉換被base64編碼的URL字符串
     var url = canvas.toDataURL('image/png')
     // 生成一個a元素
     var a = document.createElement('a')
     // 創建一個單擊事件
     var event = new MouseEvent('click')
     
     // 將a的download屬性設置為我們想要下載的圖片名稱,若name不存在則使用‘下載圖片名稱’作為默認名稱
     a.download = name || '下載圖片名稱'
     // 將生成的URL設置為a.href屬性
     a.href = url
     
     // 觸發a的單擊事件
     a.dispatchEvent(event)
    }
    // 調用方式
    // 參數一: 選擇器,代表canvas
    // 參數二: 圖片名稱,可選
    downloadCanvasIamge('canvas', '圖片名稱')
    

    二、img 標簽版本

    // 下載
    function downloadIamge(selector, name) {
     // 通過選擇器獲取img元素
     var img = document.querySelector(selector)
     // 將圖片的src屬性作為URL地址
     var url = img.src
     var a = document.createElement('a')
     var event = new MouseEvent('click')
     
     a.download = name || '下載圖片名稱'
     a.href = url
     
     a.dispatchEvent(event)
    }
    // 調用方式
    // 參數一: 選擇器,代表img標簽
    // 參數二: 圖片名稱,可選
    downloadIamge('canvas', '圖片名稱')
    

    改進版

    由于跨域會導致a標簽在部分瀏覽器中會直接打開新標簽頁,所以改進如下

    function downloadIamge(selector, name) {
     var image = new Image()
     // 解決跨域 Canvas 污染問題
     image.setAttribute('crossOrigin', 'anonymous')
     image.onload = function () {
     var canvas = document.createElement('canvas')
     canvas.width = image.width
     canvas.height = image.height
     var context = canvas.getContext('2d')
     context.drawImage(image, 0, 0, image.width, image.height)
     var url = canvas.toDataURL('image/png')
     // 生成一個a元素
     var a = document.createElement('a')
     // 創建一個單擊事件
     var event = new MouseEvent('click')
     // 將a的download屬性設置為我們想要下載的圖片名稱,若name不存在則使用‘下載圖片名稱’作為默認名稱
     a.download = name || '下載圖片名稱'
     // 將生成的URL設置為a.href屬性
     a.href = url
     // 觸發a的單擊事件
     a.dispatchEvent(event)
    }
    image.src = document.querySelector(selector).src
    }
    // 調用方式
    // 參數一: 選擇器,代表img標簽
    // 參數二: 圖片名稱,可選
    downloadIamge('canvas', '圖片名稱')
    

    三、總結

    我們主要使用的是a標簽的download屬性, 下面為MDN給出的說明:

    此屬性指示瀏覽器下載URL而不是導航到URL,因此將提示用戶將其保存為本地文件。

    如果屬性有一個值,它將在保存提示中用作預先填寫的文件名 (用戶仍然可以根據需要更改文件名)。對允許的值沒有限制,但是/和\被轉換為下劃線。大多數文件系統限制文件名中的一些標點符號,瀏覽器會相應地調整建議的名稱。

    需要注意的地方:

    此屬性僅適用于同源 URLs。

    可以使用 blob: URLs 和 data: URLs 以方便用戶下載 JavaScript 方式生成的內容(例如使用在線繪圖的Web應用創建的照片)。

    如果HTTP頭的Content-Disposition:存在,并且賦予了一個和這個屬性不同的文件名,HTTP頭優先于此屬性。

    如果這個屬性存在 Content-Disposition 被設置為 inline,火狐優先 Content-Disposition,像之前文件名??的情況下,而Chrome則優先 download 屬性。

    版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。

    發表評論

    登錄后才能評論
    国产精品区一区二区免费