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}"; } /// /// 生成图片名称:时间戳(秒)+4位随机数字 /// 示例:16907832451234.png /// /// 文件扩展名(例如 .png、.jpg),可选,默认值为 .png /// 生成的图片文件名 public static string GenerateImageFileNameTime(string extension = ".png") { // 获取当前时间戳(秒) string now = DateTime.Now.ToString("yyyyMMddHHmmssfff"); // 生成 4 位随机数(1000 - 9999) Random random = new Random(); int randomNumber = random.Next(1000, 10000); // 拼接文件名 return $"{now}_{randomNumber}{extension}"; } }