C#将图片批量转化为Base64代码

一. 作用

图片通过转化为 Base64 可以用在前端 CSS 的 Url 中。将图片进行内嵌,可以提高前端加载速度,同时也可以摆脱 HTML 页面和图片的依赖。

二. 核心代码

代码如下:

/// <summary>
/// 将图片与Base64代码互相转换
/// </summary>
public static class ImageToBase64Helper
{
    /// <summary>
    /// 将图片转化为Base64代码
    /// </summary>
    /// <param name="absolutePath">图片文件的绝对路径地址</param>
    /// <returns>Base64代码</returns>
    public static string Image2Base64(string absolutePath)
    {
        return InnerImage2Base64(absolutePath);
    }

    /// <summary>
    /// 将图片转化为CSS格式Base64代码
    /// </summary>
    /// <param name="absolutePath">图片文件的绝对路径地址</param>
    /// <returns>CSS格式Base64代码</returns>
    public static string Image2CssBase64(string absolutePath)
    {
        return InnerImage2Base64(absolutePath, Base64FormatingEnum.UseInCss);
    }

    /// <summary>
    /// 将图片转化为Javascript变量格式Base64代码
    /// </summary>
    /// <param name="absolutePath">图片文件的绝对路径地址</param>
    /// <param name="variableNam">变量名称</param>
    /// <returns>Javascript变量格式Base64代码</returns>
    public static string Image2JsBase64(string absolutePath, string variableName)
    {
        return InnerImage2Base64(absolutePath, Base64FormatingEnum.UseInJavascript, variableName);
    }

    /// <summary>
    /// 将图片转化为用户指定格式Base64代码
    /// </summary>
    /// <param name="absolutePath">图片文件的绝对路径地址</param>
    /// <param name="formatingStr">变量名称</param>
    /// <param name="variableName">用户指定格式</param>
    /// <returns>用户指定格式Base64代码</returns>
    public static string Image2CustomBase64(string absolutePath, string variableName, string formatingStr)
    {
        return InnerImage2Base64(absolutePath, Base64FormatingEnum.Custom, variableName, formatingStr);
    }

    /// <summary>
    /// 将Base64代码转化为Bitmap类型的图片对象
    /// </summary>
    /// <param name="base64Code">将Base64代码</param>
    /// <returns>Bitmap类型的图片对象</returns>
    public static Bitmap Base64ToBitmap(string base64Code)
    {
        byte[] buffer = null;
        try
        {
            buffer = Convert.FromBase64String(base64Code);
        }
        catch
        {
            return null;
        }

        try
        {
            using (MemoryStream ms = new MemoryStream(buffer))
            {
                return new Bitmap(ms);
            }
        }
        catch
        {
            return null;
        }
    }

    /// <summary>
    /// 将图片转化为Base64代码的内核处理函数
    /// </summary>
    /// <param name="absolutePath">图片文件的绝对路径地址</param>
    /// <param name="type">处理类型</param>
    /// <param name="variableName">变量名称</param>
    /// <returns>Base64代码</returns>
    private static string InnerImage2Base64(string absolutePath, Base64FormatingEnum type = Base64FormatingEnum.None, string variableName = "", string formatingStr = "")
    {
        if (!File.Exists(absolutePath))
        {
            throw new FileNotFoundException("指定路径的文件不存在!");
        }

        try
        {
            byte[] buffer = null;
            using (FileStream fileStream = new FileStream(absolutePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            {
                buffer = new byte[fileStream.Length];
                fileStream.Read(buffer, 0, (int)fileStream.Length);
            }

            string base64Code = Convert.ToBase64String(buffer);

            switch (type)
            {
                case Base64FormatingEnum.None:
                    {
                        return base64Code;
                    }
                case Base64FormatingEnum.UseInCss:
                    {
                        return "data:image/png;base64," + base64Code;
                    }
                case Base64FormatingEnum.UseInJavascript:
                    {
                        return string.Format("var {0}=\"{1}\";", variableName, base64Code);
                    }
                case Base64FormatingEnum.Custom:
                    {
                        return string.Format(formatingStr, variableName, base64Code);
                    }
            }
        }
        catch
        {
            throw;
        }
        return string.Empty;
    }

    /// <summary>
    /// 内部处理方式枚举
    /// </summary>
    private enum Base64FormatingEnum
    {
        /// <summary>
        /// 不格式化
        /// </summary>
        None = 0,

        /// <summary>
        /// CSS路径格式化
        /// </summary>
        UseInCss = 1,

        /// <summary>
        /// Js变量格式化
        /// </summary>
        UseInJavascript = 2,

        /// <summary>
        /// 自定义
        /// </summary>
        Custom=3
    }
}

 

三. 批量处理工程Demo

Demo图片:

 

 

Demo下载

posted @ 2019-11-25 15:03  霁雪湖上三映月  阅读(405)  评论(0)    收藏  举报