将本地的图片编码为Base64,以及将Base64解码为图片并保存到本地
public class Base64Image {
/**
* 图片转化成base64字符串
*
* @param imgPath
* @return
*/
public static String generateBase64(String imgPath) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
InputStream in = null;
byte[] data = null;
String encode = null; // 返回Base64编码过的字节数组字符串
// 对字节数组Base64编码
BASE64Encoder encoder = new BASE64Encoder();
try {
// 读取图片字节数组
in = new FileInputStream(imgPath);
data = new byte[in.available()];
in.read(data);
encode = encoder.encode(data);
// 在base64码头部加上“data:image/png;base64,”部分
encode = ("data:image/"+imgPath.substring(imgPath.lastIndexOf(".")+1)+";base64,"+encode).replaceAll("\r|\n", "").trim();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return encode;
}
/**
* 对字节数组字符串进行Base64解码,并生成图片
* @return
*/
public static boolean generateImage(String base64Str,String imgFilePath,String fileName) {
if (base64Str == null) {
return false;
}
BASE64Decoder decoder = new BASE64Decoder();
try {
String fileType = base64Str.substring(base64Str.indexOf("/") + 1, base64Str.indexOf(";"));
OutputStream out = new FileOutputStream(imgFilePath+fileName+"."+ fileType);
// base64解码
// 去掉base64一开始的“data:image/png;base64,”部分
base64Str = base64Str.replace("data:image/"+fileType+";base64,","");
byte[] bytes = decoder.decodeBuffer(base64Str);
for (int i = 0; i < bytes.length; i++) {
if(bytes[i]<0) { // 调整异常数据
bytes[i] += 256;
}
}
out.write(bytes);
out.flush();
out.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
public static void main(String[] args) {
// 解码成图片
String baseCode =""; // Base64编码(实在太长了,这里写不下)
// 只需传文件路径和文件名,后缀有程序自动加上
boolean b = Base64Image.generateImage(baseCode, "D:\\Java Code\\ATestProject\\src\\test06base64\\image\\","pic20211111162600");
System.out.println(b);
// 本地图片转为Base64
String base64 = Base64Image.generateBase64("D:\\Java Code\\ATestProject\\src\\test06base64\\image\\pic20211111162600.png");
System.out.println(base64);
}