使用Node.js实现base64和png文件相互转换的方法


Posted in Javascript onMarch 11, 2020

前天浏览技术博客,看到大厂面试题型中有使用nodejs实现base64和图片文件相互转换的例子,刚好近期要开发这个功能,暂时记录下来,下周开发完成再做一个补充。

1. 将base64 转换为图片文件,这里举例用的png文件

const fs = require('fs');
const path = 'xxx/'+ Date.now() +'.png';
const base64 = data.replace(/^data:image\/\w+;base64,/,""); //去掉图片base64码前面部分data:image/png;base64
// new Buffer 操作权限太大,v6.0后使用Buffer.from()创建构造函数
const dataBuffer = new Buffer(base64, 'base64'); //把base64码转成buffer对象,
fs.writeFile(path, dataBuffer, function(err){//用fs写入文件
 if(err){
  console.log(err);
 }else{
  console.log('写入成功!');
 }
})

创建Buffer
类型:类整数数组
原因:JavaScript 语言自身只有字符串数据类型,没有二进制数据类型。但在处理像TCP流或文件流时(base64即文件流),必须使用到二进制数据。因此在 Node.js中,定义了一个Buffer类,该类用来创建一个专门存放二进制数据的缓存区。

常用

const buf = Buffer.from(string, encoding); // 返回一个被 string,编码格式是base64(默认编码格式是utf-8)的值初始化的新的 Buffer 实例
buf.toJSON(); // 转换为JSON对象
buf.write(string, offset, length, encoding) // 写入node缓存区
buf.toString(encoding, start, end) // 从缓存区读取数据

2.将图片文件转换成base64

const fs = require("fs");
const util = require("util");
const imageData = await util.promisify(fs.readFileSync(fileUrl)); // 例:xxx/xx/xx.png
const imageBase64 = imageData.toString("base64");
const imagePrefix = "data:image/png;base64,";
console.log(imagePrefix + imageBase64);

知识点补充:NodeJs将任意文件转换为base64格式

很多图片音频等文件,有时候可能需要读取到数据中或者放到单文件的HTML中时,将它们转换成为base64格式是一个好方法,nodejs可以很方便的把文件转换为base64格式:

需要依赖库“fs”,“path”,“mime-types”,库mime-types可通过npm安装,具体的代码如下:

const fs = require('fs');
const path = require('path');
const mineType = require('mime-types');
 
let filePath = path.resolve('your/file/path');
 
let data = fs.readFileSync(filePath);
data = new Buffer(data).toString('base64');
 
let base64 = 'data:' + mineType.lookup(filePath) + ';base64,' + data;
 
fs.writeFileSync(path.resolve('your/save/file/path'), base64);

在你保存的文件中就有该文件的base64格式数据了,实际使用中可以直接使用转换的base64数据,然后可以放到img、audio或者video标签上使用。

总结

到此这篇关于使用Node.js实现base64和png文件相互转换的文章就介绍到这了,更多相关nodejs base64和png转换内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JS中==与===操作符的比较
Mar 21 Javascript
JS 巧妙获取剪贴板数据 Excel数据的粘贴
Jul 09 Javascript
基于JQUERY的多级联动代码
Jan 24 Javascript
JavaScript高级程序设计(第三版)学习笔记1~5章
Mar 11 Javascript
jQuery下拉框的简单应用
Jun 24 Javascript
浅谈JQ中mouseover和mouseenter的区别
Sep 13 Javascript
AngularJs $parse、$eval和$observe、$watch详解
Sep 21 Javascript
详解JavaScript权威指南之对象
Sep 27 Javascript
微信小程序 video详解及简单实例
Jan 16 Javascript
javascript回调函数的概念理解与用法分析
May 27 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
Jan 30 Javascript
vue使用element-ui实现表单验证
Dec 13 Vue.js
vue 移动端记录页面浏览位置的方法
Mar 11 #Javascript
Js逆向实现滑动验证码图片还原的示例代码
Mar 10 #Javascript
微信小程序获取公众号文章列表及显示文章的示例代码
Mar 10 #Javascript
jquery实现烟花效果(面向对象)
Mar 10 #jQuery
非常漂亮的js烟花效果
Mar 10 #Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
Mar 10 #Javascript
微信小程序实现搜索功能
Mar 10 #Javascript
You might like
咖啡知识 咖啡养豆要养多久 排气又是什么
2021/03/06 新手入门
玩转虚拟域名◎+ .
2006/10/09 PHP
php获得文件扩展名三法
2006/11/25 PHP
PHP中配置IIS7实现基本身份验证的方法
2015/09/24 PHP
php生成短网址/短链接原理和用法实例分析
2020/05/29 PHP
用javascript控制iframe滚动的代码
2007/04/10 Javascript
一个加载js文件的小脚本
2007/06/28 Javascript
Jquery ui css framework
2010/06/28 Javascript
javascript深入理解js闭包
2010/07/03 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
JQuery悬停控制图片轮播——代码简单
2015/08/05 Javascript
js实现下拉列表选中某个值的方法(3种方法)
2015/12/17 Javascript
jQuery禁用键盘后退屏蔽F5刷新及禁用右键单击
2016/01/22 Javascript
jQuery层次选择器用法示例
2016/09/09 Javascript
详解Vue用axios发送post请求自动set cookie
2017/05/10 Javascript
微信小程序tabbar不显示解决办法
2017/06/08 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
微信小程序实现折叠展开效果
2018/07/19 Javascript
Python中扩展包的安装方法详解
2017/06/14 Python
python内存管理机制原理详解
2019/08/12 Python
详解Python中的路径问题
2020/09/02 Python
python用Configobj模块读取配置文件
2020/09/26 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
马来西亚银饰品牌:JEOEL
2017/12/15 全球购物
美国时尚大码女装购物网站:Avenue
2019/05/24 全球购物
酒店保安员岗位职责
2014/01/31 职场文书
艺校音乐专业自我鉴定范文
2014/03/01 职场文书
职位说明书范文
2014/05/07 职场文书
村抢险救灾方案
2014/05/09 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
2015年重阳节慰问信
2015/03/23 职场文书
学术会议通知
2015/04/15 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
2021/06/30 SQL Server