C#图片转Base64详解

发布时间:2023-05-20

一、Base64编码概述

Base64是一种编码方式,将二进制数据转换成 ASCII 字符集中的可打印字符。Base64 是网络上最常见的用于传输二进制数据的编码方式之一,它可以将图片、音频、视频等二进制数据转换成文本格式,方便传输和处理。 示例代码:

public static string ToBase64String(byte[] bytes) 
{
    return Convert.ToBase64String(bytes);
}

Base64编码方式有多种,常用的有RFC3548规定的标准 Base64、URL-Safe Base64、直接将Base64编码后的字符串去掉一些字符即可得到 Base64 Url。在C#中,可以使用 Convert.ToBase64String 方法将二进制数据转换成 Base64 字符串。

二、图片转 Base64 的原理

在C#中,将图片转换成 Base64 字符串的原理非常简单,就是将图片二进制数据读取出来,然后使用 Convert.ToBase64String 方法将二进制数据转换成字符串: 示例代码:

public static string ImageToBase64(Image image, ImageFormat format) 
{
    using(MemoryStream ms = new MemoryStream()) 
    {
        // 将图像以指定的格式保存到流中
        image.Save(ms, format);
        // 将流转换成字节数组
        byte[] bytes = ms.ToArray();
        // 将字节数组转换成 Base64 字符串
        return Convert.ToBase64String(bytes);
    }
}

上面的代码中,使用了 C# 中的 Image 类和 ImageFormat 类读取图片数据,然后使用了 MemoryStream 类将数据保存到一个内存流中,最后使用 Convert.ToBase64String 方法将内存流中的数据转换成 Base64 字符串。

三、C#图片转 Base64的应用

1、HTML/CSS中图片转 Base64

在HTML/CSS中,使用 Base64 可以将图片直接嵌入到HTML/CSS代码中,减少页面的请求次数,加快页面加载速度。下面是实现图片转 Base64 的代码: 示例代码:

<style type="text/css">
.demo {
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAABkCAIAAACPX4IEWAAAAA3NCSVQICAjb4U/gAAAgAElEQVR4xu2deZBU1bXvH+nl79l2yy7sddd999Hy7g6JkcAAAAASUVORK5CYII=);
    width: 100px;
    height: 100px;
}
</style>
<div class="demo"></div>

上面的代码中,通过将 Base64 编码的图片数据直接嵌入到 CSS 中,实现了在页面中显示图片的效果。

2、ASP.NET 中图片转 Base64

在ASP.NET中,可以将图片转换成Base64字符串,然后将Base64字符串存储在数据库中,或者JSON数据中,方便传输。 示例代码:

protected void Page_Load(object sender, EventArgs e)
{
    string imageUrl = "http://www.example.com/image.jpg";
    byte[] imageBytes = new WebClient().DownloadData(imageUrl);
    string base64String = Convert.ToBase64String(imageBytes);
    Response.Write(base64String);
}

上面的代码中,使用了 WebClient 类从远程网站获取图片二进制数据,然后使用 Convert.ToBase64String 方法将二进制数据转换成 Base64 字符串,最后将 Base64 字符串写入 HttpResponse 中返回前端页面。

3、Windows Form 中图片转 Base64

在 Windows Form 中,可以将图片转换成 Base64 字符串,然后进行加密、显示等操作。 示例代码:

private void btnOpen_Click(object sender, EventArgs e)
{
    OpenFileDialog dialog = new OpenFileDialog();
    dialog.Filter = "图片文件|*.jpg;*.jpeg;*.bmp;*.png;*.gif";
    if (dialog.ShowDialog() == DialogResult.OK)
    {
        using (FileStream fs = new FileStream(dialog.FileName, FileMode.Open))
        {
            // 从文件流中读取图片数据
            byte[] bytes = new byte[fs.Length];
            fs.Read(bytes, 0, bytes.Length);
            // 将图片数据转换成 Base64 字符串
            string base64String = Convert.ToBase64String(bytes);
            // 将 Base64 字符串显示在文本框中
            txtResult.Text = base64String;
        }
    }
}

上面的代码中,使用了 OpenFileDialog 类从本地文件打开图片文件,然后使用 FileStream 类从文件流中读取图片数据,接着使用 Convert.ToBase64String 方法将图片数据转换成 Base64 字符串,最后将 Base64 字符串显示在 Windows Form 界面的文本框中。

4、Web API 中图片转 Base64

在 Web API 中,可以将图片转换成 Base64 字符串,然后将 Base64 字符串作为 JSON 数据返回给前端页面。 示例代码:

[HttpGet]
[Route("getimage")]
public IHttpActionResult GetImage(string imageUrl)
{
    byte[] imageBytes = new WebClient().DownloadData(imageUrl);
    string base64String = Convert.ToBase64String(imageBytes);
    return Json(new { imageBase64 = base64String });
}

上面的代码中,使用了 Web API 的 Get 方法获取远程图片,然后使用 Convert.ToBase64String 方法将图片数据转换成 Base64 字符串,最后将 Base64 字符串作为 JSON 数据返回给前端页面。

5、WPF 中图片转 Base64

在 WPF 中,可以将图片转换成 Base64 字符串,然后将 Base64 字符串显示在 WPF 界面的图片控件中。 示例代码:

private void btnOpen_Click(object sender, RoutedEventArgs e)
{
    OpenFileDialog dialog = new OpenFileDialog();
    dialog.Filter = "图片文件|*.jpg;*.jpeg;*.bmp;*.png;*.gif";
    if (dialog.ShowDialog() == true)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            // 从文件流中读取图片数据
            BitmapImage bi = new BitmapImage();
            bi.BeginInit();
            bi.UriSource = new Uri(dialog.FileName);
            bi.EndInit();
            // 将图片数据转换成 Base64 字符串
            JpegBitmapEncoder encoder = new JpegBitmapEncoder();
            encoder.Frames.Add(BitmapFrame.Create(bi));
            encoder.Save(ms);
            byte[] bytes = ms.ToArray();
            string base64String = Convert.ToBase64String(bytes);
            // 将 Base64 字符串显示在图片控件中
            imgPhoto.Source = bi;
        }
    }
}

上面的代码中,使用了 OpenFileDialog 类从本地文件打开图片文件,然后使用 BitmapImage 类从文件流中读取图片数据,接着使用 JpegBitmapEncoder 类将图片数据转换成 Base64 字符串,最后将 Base64 字符串显示在 WPF 界面的图片控件中。