前端 图片下载

2023-11-18

图片下载是项目开发过程中经常提到的需求点,本文对以往用过,见过的图片下载方法进行一个汇总,如果后面有遇到,会继续进行补充

一、如果后台直接给的图片下载地址 URL。如后台给的图片下载地址为:http://hrmanage-test.edtsoft.com/hr-manage-admin/aaa/bbb/export/test.png

方式1: 直接使用 HTML的 a 元素进行图片的下载
<a href="http://hrmanage-test.edtsoft.com/hr-manage-admin/aaa/bbb/export/test.png" download="test.png"></a>

方式2:在页面无 a 元素的情况下,创建 a 元素,再进行下载
let a = document.createElement('a')
a.download = 'test.png'
a.href = 'http://hrmanage-test.edtsoft.com/hr-manage-admin/aaa/bbb/export/test.png' 
a.click()

// 注意:向上面的这种通过直接 a 标签的形式下载, 有些浏览器会直接网页进行打开预览图片。如果图片不同源,会有跨域问题

二、将图片 url 转为 图片 base64 ,然后再进行下载(注意:太大的图片不建议转 base64 ,防止转换后长度超过浏览器限制及转换时间过长)

// 1、将图片 url 转换为 base64
imgUrltoBase64(imgUrl){
    let imgBase64 = ''
    let img = new Image()
    img.setAttribute('crossOrigin', 'Anonymous')
    img.onload = () => {
        let canvas = document.createElement('canvas')
        canvas.width = img.width
        canvas.height  = img.height 
        let context = canvas.getContext('2d')
        context.drawImage(img, 0, 0, width, height)
        imgBase64 = canvas.toDataURL('image/png')
        return imgBase64
    }   
}

// 2、下载图片
downbloadImg(imgUrl) {
    let imgBase64 = this.imgUrltoBase64(imgUrl) // 将图片 url 转换为 base64
    let a = document.createElement('a')
    a.download = 'test.png'
    a.href = imgBase64
    a.click()
}

// 3、调用 下载图片 方法
this.downbloadImg('http://hrmanage-test.edtsoft.com/hr-manage-admin/aaa/bbb/export/test.png')

三、将图片 url 转为 图片 blob ,然后 blob 转为 Blob对象的 URL,最后进行下载

// 1、将图片 url 转换为 blob
imgUrltoBlob(imgUrl){
    let blobUrl
    let img = new Image()
    img.setAttribute('crossOrigin', 'Anonymous')
    img.onload = () => {
        let canvas = document.createElement('canvas')
        canvas.width = img.width
        canvas.height  = img.height 
        let context = canvas.getContext('2d')
        context.drawImage(img, 0, 0, width, height)
        canvas.toBlob = (blob) => {
            blobUrl = URL.createObjectURL(blob)
            return blobUrl
        }
    }   
}


// 2、下载图片
downbloadImg(imgUrl) {
    let blobUrl = imgUrltoBlob(imgUrl) // 将图片 url 转换为 base64
    let a = document.createElement('a')
    a.download = 'test.png'
    a.href = blobUrl
    a.click()
}

// 3、调用 下载图片 方法
this.downbloadImg('http://hrmanage-test.edtsoft.com/hr-manage-admin/aaa/bbb/export/test.png')

四、扩展

上文中的 ‘二’ 和 ‘三’ 都是通过 图片下载过程 都是通过 url -> canvas -> blob 或者 base64 方式进行转换后下载,
但对于 .gif 的动图,利用上面的方式就只能转换第一帧的内容,因为 canvas 就画了第一帧。
对于这种下载 .gif ,可以使用 xhrHttpRequest 的方式进行转换下载。

// .gif 图片下载
downloadImg(imgUrl){
  let xhr = new XMLHttpRequest()
  xhr.open('get', imgUrl, true)
  xhr.responseType = 'blob'
  xhr.onload = function(){
    let blobUrl = URL.createObjectURL(xhr.response)
    let a = document.createElement('a')
    let clickEvent = new MouseEvent('click')
    a.href = blobUrl
    a.download = 'test.gif'
    a.dispatchEvent(clickEvent)
    URL.revokeObjectURL(blobUrl)
  }
  xhr.send()
}

this.downloadImg('http://hrmanage-test.edtsoft.com/hr-manage-admin/aaa/bbb/export/test.png')

就写到这里,后面有遇到其他的再补充,祝大家开心!!!

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端 图片下载 的相关文章

随机推荐

  • easyexcel和poi对比_POI 和 EasyExcel

    POI 和 easyExcel 讲解 转自狂神老师 仅作为个人笔记使用 一 POI 常用进程 1 将用户信息导出为excel表格 导出数据 2 将Excel表中的信息录入到网站数据库 习题上传 开发中经常会设计到excel的处理 如导出Ex
  • 五、深入理解JDK1.7中HashMap哈希冲突解决方案

    导读 前面文章一 深入理解 Java集合初篇 中我们对Java的集合体系进行一个简单的分析介绍 上两篇文章二 Jdk1 7和1 8中HashMap数据结构及源码分析 三 JDK1 7和1 8HashMap数据结构及源码分析 续 中我们分别对
  • Windows+VS2019用vcpkg编译colmap以及用Cmake编译colmap源码

    Windows VS2019用vcpkg编译colmap以及用Cmake编译colmap源码 Window下官方建议用vcpkg安装 这里我已经安装好了VS2019以及cuda11 7 1 安装vcpkg git clone https g
  • cocos mac android,cocos2dx mac android.mk

    LOCAL PATH call my dir include CLEAR VARS call import add path LOCAL PATH cocos2d call import add path LOCAL PATH cocos2
  • 深度学习论文阅读列表

    deep learning paper read lists 同步更新与github https github com chenmeiya deep learning paper read lists Learning invariace
  • Qt Creator 3.5.1(Qt4.8.4库+MinGW4.4)下不能调试问题解决(Debugging has failed)

    Qt Creator 3 5 1 Qt4 8 4库 MinGW4 4 下使用minGW4 4默认的GDB调试会不成功 提示如下 Debugging starts Debugging has failed Debugging has fini
  • 轻量级AI语言模型,直接轻松运行在你家电脑上

    最近在研究AI语言模型和AI绘画模型 无意间发现了这个轻量级模型 只需要拿到这两个文件 AI exe gpt4all lora quantized bin 双击AI exe就能直接使用 方便快捷 简直不要太爽 上面工作准备好之后 win R
  • PCL常用小知识

    转自 SimpleTriangle 时间计算 pcl中计算程序运行时间有很多函数 其中利用控制台的时间计算是 首先必须包含头文件 include
  • makeinfo: command not found解决方法

    sudo apt get install texinfo
  • Codeforces Round #751 (Div. 2) D. Frog Traveler(BFS)

    题解 因为我们最多把所有的点跳一遍么 所以直接BFS模拟一下就行了 注意现在跳的点不能是以前已经跳过的点 并且只能越跳越高 否则没有意义 这样就保证了时间复杂度是线性的 AC代码 include
  • 蓝桥杯跑步锻炼

    问题描述 小蓝每天都锻炼身体 正常情况下 小蓝每天跑 1 千米 如果某天是周一或者月初 1 日 为了 激励自己 小蓝要跑 2 千米 如果同时是周一或月初 小蓝也是跑 2 千米 小蓝跑步已经坚持了很长时间 从 2000 年 1 月 1 日周六
  • 【Java】使用Mybatis调用SQL Server存储过程

    前言 在软件开发过程中 经常会使用到存储过程 本篇文章用于讲解示例如何使用SpringBoot Mybatis的方式调用SQL Server数据库的存储过程并且得到存储过程的回参 一 存储过程的入参 这是存储过程的入参 用于后续Mybati
  • csgo fps不稳定和服务器,win10玩csgofps不稳定怎么办

    在使用win10系统的时候 很多用户们去玩csgo这款游戏 但是有些用户们却发现在玩耍游戏的时候 游戏帧数非常的不稳定 时高时低 其实导致游戏帧数不稳定的因素有很多 看看解决的方法吧 win10玩csgofps不稳定怎么办 1 关闭游戏的多
  • 基于YOLOv8模型的烟火目标检测系统(PyTorch+Pyside6+YOLOv8模型)

    摘要 基于YOLOv8模型的烟火目标检测系统可用于日常生活中检测与定位烟火目标 利用深度学习算法可实现图片 视频 摄像头等方式的目标检测 另外本系统还支持图片 视频等格式的结果可视化与结果导出 本系统采用YOLOv8目标检测算法训练数据集
  • JVM工具之jstat

    JVM工具之jstat查询GC统计信息分析 JVM工具之jstat查询GC统计信息分析jstat基本使用语法jstat class 加载类统计jstat compiler 编译统计jstat gc 垃圾回收统计jstat gccapacit
  • AVFoundation 框架小结

    AVFoundation 小结 概述 AVFoundation 是 Objective C 中创建及编辑视听媒体文件的几个框架之一 其提供了检查 创建 编辑或重新编码媒体文件的接口 也使得从设备获取的视频实时数据可操纵 但是 通常情况 简单
  • 在js中修改html、body的样式

    一 原始定义 先在css中定义 body html 宽高为300px body html width 300px height 300px 二 js操作 以修改宽度为例 获取body html节点style 主要是这里html 一开始不清楚
  • Esp8266(NodeMcu)接入新大陆物联网平台并且上传温湿度

    Esp8266 NodeMcu 接入新大陆物联网 1 平台注册和产品创建 2 代码协议部分 2 1 连接请求协议 2 2 数据上报部分协议 3 完整代码部分 3 1 效果图 使用Esp8266接入新大陆物联网平台 这几天找了一下物联网平台
  • R 四姑娘山每日客流量爬虫 时间序列建模 ARIMA 指数平滑 TBATS拟合与预测

    一 数据来源 数据来自四姑娘山景区首页新闻的每日客流量发布处 利用python爬虫读取2015年9月29号到2020年6月8日的每日客流量和对应的日期 import urllib request from bs4 import Beauti
  • 前端 图片下载

    图片下载是项目开发过程中经常提到的需求点 本文对以往用过 见过的图片下载方法进行一个汇总 如果后面有遇到 会继续进行补充 一 如果后台直接给的图片下载地址 URL 如后台给的图片下载地址为 http hrmanage test edtsof