您的当前位置:首页使用Node.js实现base64和png文件相互转换的方法

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

2022-11-12 来源:乌哈旅游
使⽤Node.js实现base64和png⽂件相互转换的⽅法

前天浏览技术博客,看到⼤⼚⾯试题型中有使⽤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.pngconst 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转换内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

因篇幅问题不能全部显示,请点此查看更多更全内容