69 lines
2.0 KiB
Java
69 lines
2.0 KiB
Java
package com.xiang.common.utils;
|
||
|
||
import java.io.FileOutputStream;
|
||
import java.io.IOException;
|
||
import java.util.Base64;
|
||
|
||
/**
|
||
* @Author: xiang
|
||
* @Date: 2026-05-08 08:56
|
||
*/
|
||
public class ImageUtils {
|
||
/**
|
||
* 将 Base64 图片写入文件
|
||
* @param base64String Base64 编码的图片字符串
|
||
* @param outputPath 输出文件路径
|
||
*/
|
||
public static void saveBase64Image(String base64String, String outputPath) {
|
||
try {
|
||
// 处理可能包含前缀的 Base64(如 data:image/png;base64,)
|
||
String base64Data = extractBase64Data(base64String);
|
||
|
||
// 解码 Base64
|
||
byte[] imageBytes = Base64.getDecoder().decode(base64Data);
|
||
|
||
// 写入文件
|
||
try (FileOutputStream fos = new FileOutputStream(outputPath)) {
|
||
fos.write(imageBytes);
|
||
}
|
||
|
||
System.out.println("图片已保存至: " + outputPath);
|
||
|
||
} catch (IllegalArgumentException e) {
|
||
System.err.println("Base64 解码失败: " + e.getMessage());
|
||
} catch (IOException e) {
|
||
System.err.println("文件写入失败: " + e.getMessage());
|
||
}
|
||
}
|
||
/**
|
||
* 提取纯 Base64 数据(去除前缀)
|
||
*/
|
||
private static String extractBase64Data(String base64String) {
|
||
if (base64String == null || base64String.isEmpty()) {
|
||
throw new IllegalArgumentException("Base64 字符串不能为空");
|
||
}
|
||
|
||
// 检查是否包含 data:image/xxx;base64, 前缀
|
||
if (base64String.contains(",")) {
|
||
return base64String.split(",", 2)[1];
|
||
}
|
||
|
||
return base64String;
|
||
}
|
||
|
||
/**
|
||
* 从 Base64 字符串中获取图片类型
|
||
*/
|
||
public static String getImageType(String base64String) {
|
||
if (base64String.startsWith("data:image/")) {
|
||
String type = base64String.substring(11, base64String.indexOf(";"));
|
||
return type; // 返回 png, jpeg, gif 等
|
||
}
|
||
return "png"; // 默认类型
|
||
}
|
||
|
||
public static void main(String[] args) {
|
||
|
||
}
|
||
}
|