.NETAdmin/ZR.Common/ImageConverter.cs
2025-08-01 13:57:31 +08:00

95 lines
3.0 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
{
/// <summary>
/// 将 Base64 编码的字符串转换为图片的二进制数据byte[])。
/// </summary>
/// <param name="base64String">Base64 编码的字符串,格式可以包含前缀(如 data:image/png;base64,)或不包含</param>
/// <returns>图片的字节数组</returns>
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);
}
/// <summary>
/// 将 Base64 转换成图片文件并保存到指定路径
/// </summary>
/// <param name="base64String">Base64 字符串</param>
/// <param name="outputPath">输出文件完整路径(包含文件名和扩展名)</param>
public static void SaveBase64AsImage(string base64String, string outputPath)
{
byte[] imageBytes = Base64ToImageBytes(base64String);
File.WriteAllBytes(outputPath, imageBytes);
}
/// <summary>
/// 从 Base64 字符串中提取文件扩展名。
/// </summary>
/// <param name="base64"></param>
/// <returns></returns>
public static string GetFileExtensionFromBase64(string base64)
{
// 正则匹配 MIME 类型
var match = Regex.Match(base64, @"^data:image/(?<format>[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 // 未知类型
};
}
/// <summary>
/// 生成图片名称:时间戳(秒)+4位随机数字
/// 示例16907832451234.png
/// </summary>
/// <param name="extension">文件扩展名(例如 .png、.jpg可选默认值为 .png</param>
/// <returns>生成的图片文件名</returns>
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}";
}
}