java 实现 :Base64字符串 和 图片 之间的相互转换

时间:2022-12-06 21:49:11

写这篇文章呢   主要是记录一下刚做过的一个很简单的功能,曲曲折折呀!


1.在线将Base64字符转和图片相互转换:http://imgbase64.duoshitong.com/


2.图片转Base64字符串:

// 图片转化成base64字符串---将图片文件转化为字节数组字符串,并对其进行Base64编码处理
public static String GetImageBase64Str() {//
String imgFile = "d://one.jpg";// 待处理的图片
InputStream in = null;
byte[] data = null;
// 读取图片字节数组
try {
in = new FileInputStream(imgFile);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
// 对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);// 返回Base64编码过的字节数组字符串
}
返回结果:

CkGZSpVSHONu3dnB9OmTXfh4041LzvtprbXz/P1POrSnFJw25rNNX011b6ef/Dno2iTghEUneRnkq2eeDgE4yB0/yPRdd2XLZRW11rbz/r5ml2436tfp5Pc9RtpSyhAWVmwoA5+Y8LxnkbsZ5PB57V0S
laKa1v5eV+/6nDrrfe7NDqz4LfImw5GDuwQ+T35HGOme+a46k3NdOZbdrffe5rTpqd276Po/J/1/wSno0Qja7d8qjTyMGz2LE5Y9T3z+f0ly5bSg05Ravfbz8++56NebjTjCMl72lt+y++9tH0fqeweH
rf7TcrdMCy2UUURYH5Wmni+XIxyRxgcY9euftchw0KnLXtLmdm7vS997br9X2PzHifGU+WWHjP39........

2.将Base64字符串转换为图片:

// base64字符串转化成图片---对字节数组字符串进行Base64解码并生成图片
public static boolean CreateImage(String imgStr) {
if (imgStr == null) // 图像数据为空
return false;
BASE64Decoder decoder = new BASE64Decoder();
try {
// Base64解码
byte[] b = decoder.decodeBuffer(imgStr);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {// 调整异常数据
b[i] += 256;
}
}
// 生成jpeg图片
String imgFilePath = "d://two.jpg";// 新生成的图片
OutputStream out = new FileOutputStream(imgFilePath);
out.write(b);
out.flush();
out.close();
return true;
} catch (Exception e) {
return false;
}
}
执行结果:在d盘生成一样 two.jpg 的图片  ,内容其实就是one.jpg,这就说明正确了。

3.但是前台后合作,往往并不是那么愉快,前台传给你了参数,但是参数错误;

  现在看一组,我在http://imgbase64.duoshitong.com/   生成 Base64的字符串,格式是这样的:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAzMAAAHjCAIAAACYaNbnAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAgAElEQVR4nOzdd1g
UV9cA8DO7Q1dsICBio6hIjBXBaGxYCBaMRE1Ro0IEUURFo4kllqgh2EBUAsaS5I0mEFE0oAHLpxFrNAo2WIwIUm2owO7OzP3+mN1lKy6wKOr5PfMku7Mzd+4UmbPn3rlLEUIAIYQQ
Qgg1AIJXXQGEEEIIISSDkRlCCCGEUEOBkRlCCCGEUEOBkRlCCCGEUEOBkRlCCCGEUENB9erV61XXASGEEELo9VZYWMgwTEFBQR3LoXDUDIQQQgihOmJZ9s6DxwM/mSy+drGkqKjW5
dAxh/81YLUQQgghhN5ayQkJN+4XWdvY1Do4oymgDFsnhBBCCKG3U........
字符串是以 : “data:image/png;base64,”  开头的,这个码是正确的,但是java是不能正确解析的,前台传给后台的时候,一定要截掉才对(不截也能解析,但是保存成图片后,报一个  文件损坏的错误   )。  如果是后台自己获取图片的Base64的字符串,就不会发生这种情况。