package com.fzzy.igds.utils;
|
|
import lombok.extern.slf4j.Slf4j;
|
import sun.misc.BASE64Decoder;
|
import sun.misc.BASE64Encoder;
|
|
import java.io.*;
|
import java.util.Base64;
|
|
/**
|
* @Description 图片Base处理
|
* @Author CZT
|
* @Date 2026/1/7 11:07
|
*/
|
@Slf4j
|
public class Base64Util {
|
|
public static String BASE_IMG_START = "data:image/jpg;base64,";
|
|
/**
|
* 根据地址,把图片转换为Base64字符串
|
* <p>
|
* data:image/jpg;base64,
|
*
|
* @param diskFile
|
* @return
|
*/
|
public static String getImageStr(String diskFile) {
|
InputStream in = null;
|
byte[] data = null;
|
// 读取图片字节数组
|
try {
|
in = new FileInputStream(diskFile);
|
data = new byte[in.available()];
|
in.read(data);
|
// in.close();
|
} catch (IOException e) {
|
e.printStackTrace();
|
} finally {
|
try {
|
if (null != in)
|
in.close();
|
} catch (Exception e) {
|
}
|
}
|
BASE64Encoder encoder = new BASE64Encoder();
|
return BASE_IMG_START + encoder.encode(data);
|
}
|
|
/**
|
* 对字节数组字符串进行Base64解码并生成图片
|
*
|
* @param imgStr
|
* @return
|
*/
|
public static boolean generateImage(String imgStr, String diskFile) {
|
if (imgStr == null)
|
return false;
|
|
if (imgStr.startsWith("data:")) {
|
imgStr = imgStr.substring(BASE_IMG_START.length());
|
}
|
BASE64Decoder decoder = new BASE64Decoder();
|
OutputStream out = null;
|
try {
|
// Base64解码
|
byte[] b = decoder.decodeBuffer(imgStr);
|
for (int i = 0; i < b.length; ++i) {
|
if (b[i] < 0) {
|
b[i] += 256;
|
}
|
}
|
// 生成jpeg图片
|
out = new FileOutputStream(diskFile);
|
out.write(b);
|
out.flush();
|
// out.close();
|
return true;
|
} catch (Exception e) {
|
return false;
|
} finally {
|
try {
|
if (null != out)
|
out.close();
|
} catch (Exception e) {
|
|
}
|
}
|
}
|
|
|
/**
|
* base64转为图片
|
*
|
* @param path 文件路径:到文件夹即可,代码里会在文件夹里生成对应的jpg文件
|
* @param base64
|
* @return
|
*/
|
public static String base64ToJpg(String path, String fileName, String base64) {
|
// 判断文件路径是否存在
|
File filePath = new File(path);
|
if (!filePath.exists()) {
|
filePath.mkdirs();
|
}
|
// 创建文件
|
String jpgFile = path + "\\" + fileName + ".jpg";
|
File file = new File(jpgFile);
|
boolean jpgFileExist = false;
|
try {
|
jpgFileExist = file.createNewFile();
|
log.info("jpg文件创建成功");
|
} catch (IOException e) {
|
log.info("jpg文件创建失败");
|
e.printStackTrace();
|
}
|
if (jpgFileExist) {
|
// 解密
|
Base64.Decoder decoder = Base64.getDecoder();
|
// 去掉base64前缀 data:image/jpeg;base64,
|
base64 = base64.substring(base64.indexOf(",", 1) + 1, base64.length());
|
byte[] b = decoder.decode(base64);
|
// 处理数据
|
for (int i = 0; i < b.length; ++i) {
|
if (b[i] < 0) {
|
b[i] += 256;
|
}
|
}
|
// 保存图片
|
try {
|
FileOutputStream out = new FileOutputStream(jpgFile);
|
out.write(b);
|
out.flush();
|
out.close();
|
// 写入成功返回文件路径
|
return jpgFile;
|
} catch (FileNotFoundException e) {
|
log.info("文件未找到");
|
e.printStackTrace();
|
} catch (IOException e) {
|
log.info("写入失败");
|
e.printStackTrace();
|
}
|
}
|
return "文件不存在";
|
}
|
}
|