项目中有使用到对图片进行base64转码,然后解码保存的小功能,这边先记录下实现,网上的方案超级多,我也是从上面整理的,拿下来测试下。
想到java的实现后,又想到自己小博客好像也有对base64进行转化存储的功能,赶紧也贴上来,两遍对照下,反正都用得着。
java 代码
package test;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/***
* 测试转化图片为base64字符串
* @author Administrator
*
*/
public class Base64 {
//转化图片为base64
public static String convertStr(String filePath) throws Exception {
InputStream is = new FileInputStream(filePath);
byte[] data = null;
data = new byte[is.available()];
is.read(data);
is.close();
return java.util.Base64.getEncoder().encodeToString(data);
}
//转化字符串为图片
public static String convertImg(String base64,String filePath) throws Exception {
byte[] arr = java.util.Base64.getDecoder().decode(base64);
for (int i = 0; i < arr.length; ++i) {
if (arr[i] < 0) {// 调整异常数据
arr[i] += 256;
}
}
OutputStream out = new FileOutputStream(filePath);
out.write(arr);
out.flush();
out.close();
return filePath;
}
public static void main(String[] args) throws Exception {
String filePath = "d:/ttt/a.png";
// System.out.println(filePath);
// String str = convertStr(filePath);
// System.out.println(str);
String ab = "--- 这个是转码后的base64";//贴上后发现有点长,就去掉了
String filePath2 = "d:/ttt/b.png";
convertImg(ab,filePath2);
}
}
nodejs 代码
//实现nodejs版本图片base64互转
let filePath = 'd:/ttt/a.png';
let filePath2 = 'd:/ttt/c.png';
let fs = require('fs');
function convertImg(filePath){
//读取图片,并转为base64
return new Promise((resolve,reject)=>{
let rs = fs.createReadStream(filePath);
let chunks = [];
let size = 0;
rs.on('data',chunk=>{
chunks.push(chunk);
size += chunk.length;
});
rs.on('error',()=>{
reject('读取错误');
})
rs.on('close',()=>{
let buffer = Buffer.concat(chunks,size);
let baseStr = buffer.toString('base64');
resolve(baseStr);
});
});
}
function convertStr(str,filePath){
return new Promise((resolve,reject)=>{
var base64Data = str.replace(/^data:image\/\w+;base64,/, "");
var dataBuffer = new Buffer(base64Data, 'base64');
fs.writeFile(filePath,dataBuffer,function(err){
if(err){
reject(err);
}else{
resolve(true);
}
});
});
}
convertImg(filePath).then((basestr)=>{
return convertStr(basestr,filePath2);
})
.then(flag=>{
console.log(flag);
})
.catch(err=>{
console.log(err);
})
最后简单贴个截图看下
实现都不算是复杂,至于效率神马的..我也没测,估摸着相差应该也不会很大(额.也不一定。我瞎猜的)
以上是java和nodejs 对图片和base64两种格式的相互转化实现。