首页 > 编程语言 >直播app源码,js图片下载方式集合

直播app源码,js图片下载方式集合

时间:2023-10-30 14:11:21浏览次数:35  
标签:canvas const string fileReader app 图片下载 源码 let image

直播app源码,js图片下载方式集合

一、文件流格式下载

创建 a 标签下载文件流格式图片

 


/**
 * 创建 <a> 标签下载文件流格式图片
 * @param file 
 * @param fileName 
 */
export const downloadFile = (file: string, fileName?: string) => {
  const blob = new Blob([file]);
  const fileReader = new FileReader();
  fileReader.readAsDataURL(blob);
  fileReader.onload = (e) => {
    const a = document.createElement("a");
    a.download = fileName || '0123456.PNG';
    a.href = e.target?.result as string;
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
  };
}

 

文件流格式还可以转为Base64格式之后,再以链接格式下载

转换方式如下

 


export const downloadFileUrl = (file: Blob) => {
  const blob = new Blob([file]);
  const fileReader = new FileReader();
  fileReader.readAsDataURL(blob);
  fileReader.onload = (e) => {
    const url = e.target?.result as string;
    downloadImage(`data:image/png;Base64,${url}`, 'testefd')
  };
}

 

 

二、链接格式下载

 

/**
 * 根据图片路径下载
 * @param imgsrc 图片路径
 * @param name 下载图片名称
 * @param type 格式图片,可选,默认png ,可选 png/jpeg
 */
export const downloadImage = (imgsrc: string, name: string, type: string = 'png') => {
  let image = new Image();
  // 解决跨域 Canvas 污染问题
  image.setAttribute("crossOrigin", "anonymous");
  image.onload = function () {
    let canvas = document.createElement("canvas");
    canvas.width = image.width;
    canvas.height = image.height;
    let context = canvas.getContext("2d");
    context?.drawImage(image, 0, 0, image.width, image.height);
    let url = canvas.toDataURL(`image/${type}`); //得到图片的base64编码数据
    let a = document.createElement("a"); // 生成一个a元素
    let event = new MouseEvent("click"); // 创建一个单击事件
    a.download = name || "pic"; // 设置图片名称
    a.href = url; // 将生成的URL设置为a.href属性
    a.dispatchEvent(event); // 触发a的单击事件
  }
  //将资源链接赋值过去,才能触发image.onload 事件
  image.src = imgsrc
}

 

 以上就是 直播app源码,js图片下载方式集合,更多内容欢迎关注之后的文章

 

标签:canvas,const,string,fileReader,app,图片下载,源码,let,image
From: https://www.cnblogs.com/yunbaomengnan/p/17797694.html

相关文章

  • 06ArrayList源码分析
    ArrayList一、ArrayList集合的底层原理--扩容机制利用空参创建的集合,在底层创建一个默认长度为零的一个数组。添加第一个元素时,底层会创建一个新的长度为10的数组。存满时候,会扩容1.5倍。如果一次添加多个元素,1.5倍放不下,则创建数组的长度以实际为准。如:添加100......
  • 08迭代器源码分析
    Iterator一、源码分析size:集合的长度。cursor:光标,表示迭代器的指针,默认指向0索引位置二、modCount作用modCount++;是集合变化的次数(删除或者添加)。expectedModCount创建的迭代器的时候会把集合变化的次数传递给这个变量。(相当于迭代器对次数自己做了一次记录)c......
  • zookeeper源码(03)启动流程
    本文将从启动类开始详细分析zookeeper的启动流程:加载配置的过程集群启动过程单机版启动过程启动类org.apache.zookeeper.server.quorum.QuorumPeerMain类。用于启动zookeeper服务,第一个参数用来指定配置文件,配置文件properties格式,例如以下配置参数:dataDir-数据存储目......
  • APP开发选原生开发还是混合开发?
    最近也有不少用户留言,问一些基础的内容,例如:App采用怎样的开发方式更好?便有感而发,希望通过这篇文章再做一下小结。先亮结果,是采用原生还是混合的开发方式,需要先了解业务规划,然后根据业务的实际需求再制定研发技术选型及研发计划。为什么只能一事一议?这个还得从技术架构的优劣势开始......
  • java中native源码查找方法
    以Object的hashCode()方法为例:1.下载openjdk源码或从github中查找,这里以github中查找为例;2.GitHub中查找https://github.com/bpupadhyaya/openjdk-8/tree/master/hotspot源码;3.搜索到Object.c源码文件,并查找hashCode字眼,如下所示: 4.由上可知,hashCode方法实际是调用的jvm.c......
  • stm32 uboot调试1--Apple的学习笔记
    一,前言openocd+stlink的vscode远程gdb调试环境搭建完成了,那么用吧,串口也不连接了。用自带的configs/stm32f429-discovery_defconfig进行的编译,然后就直接调试了。二,问题记录问题1:board_init_f进入fdt初始化就进入hang。答:因为fdt是分离的但是我并没有下载到某个地址,于是先配置为嵌......
  • 网安基础入门(三)——APP架构与云安全
    网络安全基础入门(三)——APP架构&云安全知识点WebApp原生APPH5开发Flutter云安全云服务云原生特点及安全APP架构一、常规Web开发WebApp开发是指创建可以在网页浏览器中运行的应用程序。这些应用程序通常使用标准的Web技术(如HTML、CSS和JavaScript)来实现,并且可以通......
  • extend和append的异同
    ​extend()和append()是Python列表对象的两种方法,用于在列表中添加元素。它们之间的主要区别在于添加元素的方式和结果。extend()方法:用法:list1.extend(iterable)参数:iterable,一个可迭代对象,如列表、元组、字符串等。功能:将可迭代对象中的每个元素添加到列表的末尾。......
  • 基于SpringBoot框架的教学评价系统-计算机毕业设计源码+LW文档
    摘要随着时代的发展,我国的教育水平在不断的提高,但是很多时候为了更好的提高教学的质量,会让学生对当前的教学进行评价,教育工作者根据学生的评价发现当下教学中的一些不足,从而更好的提高教学质量,为了让教学评价变的更加的方便我们开发了本次的教学评价系统。本系统从用户的角度出......
  • 基于ssm的奖学金评定系统-计算机毕业设计源码+LW文档
    摘 要 随着时代的发展,我国高校的信息化程度也越来越高,很多高校都实现了数据的信息化管理,但是在很多高校还是使用传统人工的方式在对奖学金评定相关内容进行管理,为了提高高校的整体奖学金评定管理水平,为此我开发了本基于SSM框架的奖学金评定系统管理网站本基于SSM框架的奖学金......