using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace ZR.Common;
public static class ImageConverter
{
///
/// 将 Base64 编码的字符串转换为图片的二进制数据(byte[])。
///
/// Base64 编码的字符串,格式可以包含前缀(如 data:image/png;base64,)或不包含
/// 图片的字节数组
public static byte[] Base64ToImageBytes(string base64String)
{
// 如果包含 data:image/...base64, 的前缀,去除它
var base64Data = base64String;
if (base64String.Contains(","))
{
base64Data = base64String.Substring(base64String.IndexOf(",") + 1);
}
// 将 base64 字符串转换为字节数组
return Convert.FromBase64String(base64Data);
}
///
/// 将 Base64 转换成图片文件并保存到指定路径
///
/// Base64 字符串
/// 输出文件完整路径(包含文件名和扩展名)
public static void SaveBase64AsImage(string base64String, string outputPath)
{
byte[] imageBytes = Base64ToImageBytes(base64String);
File.WriteAllBytes(outputPath, imageBytes);
}
///
/// 从 Base64 字符串中提取文件扩展名。
///
///
///
public static string GetFileExtensionFromBase64(string base64)
{
// 正则匹配 MIME 类型
var match = Regex.Match(base64, @"^data:image/(?[a-zA-Z+]+);base64,");
if (!match.Success) return null;
string mimeType = match.Groups["format"].Value.ToLower();
// MIME 类型转文件扩展名
return mimeType switch
{
"png" => ".png",
"jpeg" or "jpg" => ".jpg",
"gif" => ".gif",
"webp" => ".webp",
"bmp" => ".bmp",
"svg+xml" => ".svg",
"tiff" => ".tiff",
"x-icon" => ".ico",
_ => null // 未知类型
};
}
///
/// 生成图片名称:时间戳(秒)+4位随机数字
/// 示例:16907832451234.png
///
/// 文件扩展名(例如 .png、.jpg),可选,默认值为 .png
/// 生成的图片文件名
public static string GenerateImageFileName(string extension = ".png")
{
// 获取当前时间戳(秒)
long timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
// 生成 4 位随机数(1000 - 9999)
Random random = new Random();
int randomNumber = random.Next(1000, 10000);
// 拼接文件名
return $"{timestamp}_{randomNumber}{extension}";
}
}