java base64 不一样,java中对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);

})

最后简单贴个截图看下

e74ac29f59076c635d4f68ddc2d09580.png

实现都不算是复杂,至于效率神马的..我也没测,估摸着相差应该也不会很大(额.也不一定。我瞎猜的)

以上是java和nodejs 对图片和base64两种格式的相互转化实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是Java实现Base64图片互转的代码: ```java import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.Base64; public class ImageBase64Util { /** * 将图片转换成Base64编码字符串 * * @param imagePath 图片路径 * @return Base64编码字符串 */ public static String imageToBase64(String imagePath) { String base64 = null; InputStream in = null; try { in = new FileInputStream(imagePath); byte[] bytes = new byte[in.available()]; in.read(bytes); base64 = Base64.getEncoder().encodeToString(bytes); } catch (Exception e) { e.printStackTrace(); } finally { try { in.close(); } catch (Exception e) { e.printStackTrace(); } } return base64; } /** * 将Base64编码字符串转换成图片 * * @param base64 Base64编码字符串 * @param imagePath 图片保存路径 * @return 是否保存成功 */ public static boolean base64ToImage(String base64, String imagePath) { boolean result = false; OutputStream out = null; try { out = new FileOutputStream(imagePath); byte[] bytes = Base64.getDecoder().decode(base64); out.write(bytes); result = true; } catch (Exception e) { e.printStackTrace(); } finally { try { out.close(); } catch (Exception e) { e.printStackTrace(); } } return result; } } ``` 使用示例: ```java public class ImageBase64UtilTest { public static void main(String[] args) { // 图片路径 String imagePath = "D:/test.png"; // 将图片转换成Base64编码字符串 String base64 = ImageBase64Util.imageToBase64(imagePath); System.out.println(base64); // 将Base64编码字符串转换成图片 String newImagePath = "D:/newtest.png"; ImageBase64Util.base64ToImage(base64, newImagePath); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值