使用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 相关文章推荐
javascript下过滤数组重复值的代码
Sep 10 Javascript
Firebug 字幕文件JSON地址获取代码
Oct 28 Javascript
JSONP 跨域访问代理API-yahooapis实现代码
Dec 02 Javascript
用Javascript获取页面元素的具体位置
Dec 09 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
Jun 10 Javascript
jquery实现标题字体变换的滑动门菜单效果
Sep 07 Javascript
JavaScript中Window对象的属性及事件
Dec 25 Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
May 04 jQuery
手机注册发送验证码倒计时的简单实例
Nov 15 Javascript
js读取本地文件的实例
Dec 22 Javascript
Jquery的Ajax技术使用方法
Jan 21 jQuery
使用纯前端JavaScript实现Excel导入导出方法过程详解
Aug 07 Javascript
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
MySQL的FIND_IN_SET函数使用方法分享
2012/03/27 PHP
php异常处理使用示例
2014/02/25 PHP
php利用反射实现插件机制的方法
2015/03/14 PHP
php实现用手机关闭计算机(电脑)的方法
2015/04/22 PHP
PHP实现递归复制整个文件夹的类实例
2015/08/03 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
2015/11/05 PHP
Javascript实例教程(19) 使用HoTMetal(6)
2006/12/23 Javascript
javascript 一个函数对同一元素的多个事件响应
2009/07/25 Javascript
Jquery下判断Id是否存在的代码
2011/01/06 Javascript
jQuery帮助之筛选查找 children([expr])
2011/01/31 Javascript
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
JS实现随机数生成算法示例代码
2013/08/08 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
一款简单的jQuery图片标注效果附源码下载
2016/03/22 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
javascirpt实现2个iframe之间传值的方法
2016/06/30 Javascript
原生JS:Date对象全面解析
2016/09/06 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
Vue 2中ref属性的使用方法及注意事项
2017/06/12 Javascript
Vue CLI3 如何支持less的方法示例
2018/08/29 Javascript
vue router导航守卫(router.beforeEach())的使用详解
2019/04/19 Javascript
浅谈vue项目用到的mock数据接口的两种方式
2019/10/09 Javascript
pycharm 关掉syntax检查操作
2020/06/09 Python
Sephora丝芙兰泰国官方网站:国际知名化妆品购物
2017/11/15 全球购物
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
以太网Ethernet IEEE802.3
2013/08/05 面试题
表彰先进集体通报
2014/01/12 职场文书
体育系毕业生求职自荐信
2014/04/16 职场文书
小学一年级评语大全
2014/04/22 职场文书
团支部推优材料
2014/05/21 职场文书
法学专业毕业生求职信
2014/06/12 职场文书
演讲稿开场白台词
2014/08/25 职场文书
社区领导班子四风问题原因分析及整改措施
2014/09/28 职场文书
幼儿园老师新年寄语2015
2014/12/08 职场文书
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL
进阶篇之linux环境下安装MySQL数据库
2022/04/09 MySQL