JS——PC端下载图片

217 阅读1分钟

PC端使用a标签指向一个图片,点击链接时会在浏览器中预览图片,而不是直接下载

<a href="http://csssecrets.io/images/tiger.jpg">img</a>

1.gif

1. 使用a标签的属性download

  • a标签添加了download属性,将直接下载文件,并根据download属性的值设置下载文件的文件名,
  • 不为download属性设置值则文件将以默认文件名下载
  • 仅支持同源链接下载,非同源链接还是会直接打开图片
<!-- 同源链接能下载图片 -->
<a href="./file/catlace.jpg" download>同源链接-可以下载</a>
<!-- 文件名为cat.png -->
<a href="./file/catlace.jpg" download="cat.png" >同源链接-设置下载的文件名</a></a>
<!-- 非同源链接download属性会无效,浏览器会直接打开图片 -->
<a href="http://www.baidu.com/img/baidu_jgylogo3.gif" download>非同源链接-不能下载</a>

1.gif

2. 将图片转成Base64下载

<!DOCTYPE html>
<html>
  <script>
    function downloadImgByBase64(url) {
      var img = new Image();
      img.onload = function() {
        var canvas = document.createElement("canvas");
        canvas.width = img.width;
        canvas.height = img.height;
        var ctx = canvas.getContext("2d");
        // 将img中的内容画到画布上
        ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
        // 将画布内容转换为base64
        var base64 = canvas.toDataURL();
        // 创建a链接
        var a = document.createElement("a");
        a.href = base64;
        a.download = "";
        // 触发a链接点击事件,浏览器开始下载文件
        a.click();
      };
      img.src = url;
      // 必须设置,否则canvas中的内容无法转换为base64
      img.setAttribute("crossOrigin", "Anonymous");
    }
  </script>
  <body>
    <button
      onclick="downloadImgByBase64(`http://csssecrets.io/images/tiger.jpg`)"
    >
      下载图片
    </button>
  </body>
</html>

1.gif

3. 将图片转成Blob下载

<!DOCTYPE html>
<html>
  <script>
    function downloadImgByBlob(url) {
      var img = new Image();
      img.onload = function() {
        var canvas = document.createElement("canvas");
        canvas.width = img.width;
        canvas.height = img.height;
        var ctx = canvas.getContext("2d");
        // 将img中的内容画到画布上
        ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
        // 将画布内容转换为Blob
        canvas.toBlob(blob => {
          // blob转为同源url
          var blobUrl = window.URL.createObjectURL(blob);
          // 创建a链接
          var a = document.createElement("a");
          a.href = blobUrl;
          a.download = "ani.jpg"; // 文件名
          // 触发a链接点击事件,浏览器开始下载文件
          a.click();
        });
      };
      img.src = url;
      // 必须设置,否则canvas中的内容无法转换为blob
      img.setAttribute("crossOrigin", "Anonymous");
    }
  </script>
  <body>
    <button
      onclick="downloadImgByBlob(`http://csssecrets.io/images/tiger.jpg`)"
    >
      下载图片
    </button>
  </body>
</html>

1.gif

4. 通过XMLHttpRequest()下载图片

通过XMLHttpRequest()请求图片链接,然后获取返回的Blob

<!DOCTYPE html>
<html>
  <script>
    function downloadImgByXML(url) {
      var x = new XMLHttpRequest();
      x.open("GET", url, true);
      x.responseType = "blob";
      x.onload = function(e) {
        var url = window.URL.createObjectURL(x.response);
        var a = document.createElement("a");
        a.href = url;
        a.download = "my_tiger.jpg";
        a.click();
      };
      x.send();
    }
  </script>
  <body>
    <button onclick="downloadImgByXML(`http://csssecrets.io/images/tiger.jpg`)">
      下载图片
    </button>
  </body>
</html>

1.gif 这种方法也能够下载gif图