java中对base64与图片的互转实现

java中对base64与图片的互转实现

月光魔力鸭

2018-12-13 11:54 阅读 909 喜欢 0 base64图片转化

项目中有使用到对图片进行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);
})

最后简单贴个截图看下

a.png - b.png - c.png


实现都不算是复杂,至于效率神马的..我也没测,估摸着相差应该也不会很大(额.也不一定。我瞎猜的) 以上是java和nodejs 对图片和base64两种格式的相互转化实现。

转载请注明出处: https://chrunlee.cn/article/java-base64-png.html


感谢支持!

赞赏支持
提交评论
评论信息 (请文明评论)
暂无评论,快来快来写想法...
推荐
关于即时通讯,现在各路APP基本都有,虽然不能说是核心,但是如果没有又总会觉的少点啥。 如果对即时通讯要求不高,且用户量不大,只是想要从无到有的话,可以直接使用现有的服务即可,有不少免费的足够支持小量用户的要求。但是如果用户量稍微较大,且需要一些定制服务又不想受制于人,那么搭建自己的即时通讯服务器可能是你最终的选择。但是,从头开发肯定是不可能的。
项目为nginx+tomcat 部署的,由于需要https环境,本来直接配置nginx https就可以了,结果在jsp 中获取request.getScheme 怎么都是http .. 可把我这个假运维愁坏了。
nginx 监听的服务器的9000 端口,转的443 到tomcat 中,但是在java web jsp中获取的端口却还是443.
之前没接触过tigase,最近开始准备用这个来做IM ,开始预研..不过中间比较坎坷,虽然有忙别的事情,但是前前后后还是花了好几天的时间,资源太少,官网又看不懂,git还下不下来... 啥机制也不懂.. 真惆怅。
项目为长期稳定运行中,由于新增功能或修复BUG,修改代码后无法启动。根据添加的代码删减,最后确认出的问题。
使用spring boot 来传递日期参数的时候,发现报错。顺手记录。
记录下关于通过tomcat来配置https ,使java web项目可以直接通过https来访问,之前的时候都是走nginx来配置https,由于特殊原因443端口不能开启(具体是啥不清楚,运维不让开),只能如此配置下。
最近项目使用了spring-boot框架,在部署过程中出现了很多问题,这里记录下,防止后续遗忘。