首页 > 其他分享 >base64 数据转png本地图片保存,js实现

base64 数据转png本地图片保存,js实现

时间:2024-07-14 15:42:42浏览次数:6  
标签:Base64 URL base64 downloadLink js 对象 Blob var png

要将 base64 编码的图像数据保存为 PNG 文件到本地,可以借助 JavaScript 和浏览器的 File API。以下是一个简单的步骤和示例代码:

步骤:

  1. 解析 Base64 数据:将 Base64 编码的字符串解析为二进制数据。

  2. 创建 Blob 对象:使用解析后的二进制数据创建一个 Blob 对象。

  3. 创建 URL:通过 URL.createObjectURL() 方法创建一个临时的 URL,用于指向 Blob 对象。

  4. 创建下载链接:将临时 URL 赋值给 <a> 标签的 href 属性,设置 download 属性为文件名,然后模拟点击 <a> 标签来触发下载。

示例代码:

// 假设 base64data 是你的 Base64 编码的图像数据
var base64data = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...'; // 你的 Base64 数据

// 解析 Base64 数据
var blob = base64ToBlob(base64data);

// 创建下载链接
var downloadLink = document.createElement('a');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = 'image.png'; // 下载文件名为 image.png

// 模拟点击下载链接
downloadLink.click();

// 释放 URL 对象
URL.revokeObjectURL(downloadLink.href);

// 将 Base64 数据解析为 Blob 对象
function base64ToBlob(base64data) {
  var arr = base64data.split(',');
  var mime = arr[0].match(/:(.*?);/)[1];
  var bstr = atob(arr[1]);
  var n = bstr.length;
  var u8arr = new Uint8Array(n);
  
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  
  return new Blob([u8arr], { type: mime });
}

解释:

  • base64ToBlob 函数将 Base64 编码的图像数据转换为 Blob 对象。首先,通过 split(',') 分割 Base64 数据,获取 MIME 类型。然后,使用 atob 解码 Base64 数据为二进制字符串,并将其存入 Uint8Array 中。最后,使用 Blob 构造函数创建 Blob 对象,并指定 MIME 类型。

  • URL.createObjectURL(blob) 创建一个临时的 URL,指向 Blob 对象。

  • downloadLink.click() 模拟点击 <a> 标签来触发下载。

这样,就可以通过 JavaScript 将 Base64 编码的 PNG 图像数据保存为本地文件。

URL.createObjectURL 如何使用

URL.createObjectURL 是一个用于创建对象 URL 的方法,主要用于在浏览器中临时生成一个 URL,该 URL 可以指向一个 Blob 对象或者一个 File 对象。通常情况下,我们使用它来实现文件下载、显示 Blob 对象的内容等操作。

使用方法:

  1. 创建对象 URL

    var blob = new Blob(['Hello, World!'], { type: 'text/plain' });
    var url = URL.createObjectURL(blob);
    

    在这个例子中,我们创建了一个包含文本内容的 Blob 对象,然后使用 URL.createObjectURL 方法创建了一个指向该 Blob 对象的 URL。

  2. 使用对象 URL

    • 在下载链接中使用

      var downloadLink = document.createElement('a');
      downloadLink.href = url;
      downloadLink.download = 'file.txt'; // 设置下载文件名
      downloadLink.textContent = 'Download File';
      
      document.body.appendChild(downloadLink);
      
      // 模拟点击下载链接
      downloadLink.click();
      

      上面的代码创建了一个 <a> 标签,将对象 URL 赋值给 href 属性,设置了 download 属性来指定下载文件的名称,然后通过 click() 方法模拟用户点击下载链接。

    • 在视频或音频元素中显示

      var video = document.createElement('video');
      video.src = url;
      video.controls = true;
      
      document.body.appendChild(video);
      

      这段代码创建了一个 <video> 元素,并将对象 URL 赋值给 src 属性,从而将 Blob 对象的内容显示在视频播放器中。

  3. 释放对象 URL

    当不再需要对象 URL 时,应该及时释放以节省资源。可以通过 URL.revokeObjectURL 方法来释放对象 URL:

    URL.revokeObjectURL(url);
    

    调用 URL.revokeObjectURL 后,之前通过 URL.createObjectURL 创建的 URL 将会失效。

注意事项:

  • URL.createObjectURL 创建的对象 URL 是临时的,通常在当前页面关闭或刷新时会被浏览器自动释放,但最佳实践是在不再需要使用时手动调用 URL.revokeObjectURL 进行释放。

  • 对象 URL 通常用于在浏览器中临时展示或下载 Blob 数据,是一种非常便利的操作方式,特别适合于处理二进制数据、大文件等场景。

标签:Base64,URL,base64,downloadLink,js,对象,Blob,var,png
From: https://www.cnblogs.com/jocongmin/p/18301631

相关文章

  • js 一个函数有几种类型的属性
    在JavaScript中,函数对象可以拥有多种类型的属性。主要可以分为以下几类:实例属性(Instanceproperties):这些属性是在通过函数构造函数创建实例时绑定到实例上的属性。原型属性(Prototypeproperties):这些属性是绑定到函数对象的原型上的属性。实例可以通过原型链访问这些......
  • js class super的作用
    jssuper作用在JavaScript中,super关键字有两个主要用途:在子类的构造函数中调用父类的构造函数:使用super()来调用父类的构造函数,并继承父类的属性。在子类的方法中调用父类的方法:使用super.methodName()来调用父类的方法。示例解释使用类classParent{......
  • vue.js下载安装
    参考——https://www.jb51.net/article/283884.htm 注:使用的是vue2进入官网https://cn.vuejs.org/文档——》vue2文档 或者直接通过这里https://v2.cn.vuejs.org/v2/guide/复制绿色部分,粘贴到浏览器https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js ......
  • es5 js函数有哪几种继承方式
    在ES5(ECMAScript5)中,JavaScript函数有几种继承方式,主要是通过原型链实现的。以下是常见的几种继承方式:原型链继承(PrototypeInheritance):原理:通过将子类的原型对象设置为父类的实例来实现继承。特点:可以继承父类的实例方法和属性,但无法实现多继承。示例:functionParent(na......
  • Sortable.js板块拖拽示例
    图例代码在图片后面点赞❤️+关注......
  • Highlight.js示例
    图例 代码在图片后面点赞❤️+关注......
  • js实现归并排序算法
    在JavaScript中实现归并排序可以通过递归的方式完成。归并排序使用了“分而治之”的策略,将数组递归地分成两个子数组,分别进行排序,然后将它们合并成一个有序数组。以下是一个简单的归并排序实现:functionmergeSort(arr){//如果数组只有一个元素或为空,则直接返回数组......
  • js实现快速排序算法
    在JavaScript中实现快速排序可以通过递归方式来完成。下面是一个示例代码:functionquickSort(arr){//如果数组为空或只有一个元素,则无需排序if(arr.length<=1){returnarr;}//选择基准元素(这里选择中间元素)constpivotIndex=Math.fl......
  • 【反悔贪心】P2949WorkSchedulingG+P4053[JSOI2007]建筑抢修题解
    这两天遇到了几个很神奇的题目——能反悔的贪心。赶紧记录一下。例1(用时一定模型)用时一定:每个任务完成的耗时都是一样的。题面:Luogu-P2949WorkSchedulingG大体思路是:先把所有任务按照截止时间从小到大排序,然后枚举,遇到一个能做任务的就把他做了,把他的贡献加入一个......
  • three.js+vue污水处理厂数字孪生平台智慧城市web3d
    案例效果截图如下: 主场景三维逻辑代码如下:<template><divclass="whole"><!--threejs画布--><divid="threejs"ref="threejs"></div><!--污水厂模型加载进度条--><a-progress:stroke-colo......