本文介绍了在.NET C#环境中实现图片与BASE64编码之间的相互转换方法,包括将图片文件转为BASE64字符串以及从BASE64字符串还原成图片的方法。
在.NET框架下的C#语言中实现图片与BASE64编码之间的相互转换是一项常见的需求,尤其在需要通过网络传输图像数据时。以下将详细介绍如何利用C#编写代码来完成这一过程。
### 一、图片转BASE64编码
#### 1.1 准备工作
在进行转换之前,我们需要准备一个图片文件。此示例中使用了一个`OpenFileDialog`对话框让用户选择一个或多个图像文件。
```csharp
OpenFileDialog dlg = new OpenFileDialog();
dlg.Multiselect = true;
dlg.Title = 选择要转换的图片;
dlg.Filter = Image files (*.jpg;*.bmp;*.gif;*.png)|*.jpg;*.jpeg;*.gif;*.bmp|All Files (*.*)|*.*;
```
#### 1.2 转换逻辑
当用户选择了图片文件后,程序调用`ImgToBase64String`方法来进行转换。该方法的主要步骤如下:
1. **加载图像**:首先使用`Bitmap`类加载所选的图像文件。
2. **创建内存流**:接着创建一个`MemoryStream`对象用于保存图像数据。
3. **保存为JPEG格式**:使用`Bitmap.Save`方法将图像保存到内存流中,并指定图像格式为JPEG。
4. **读取二进制数据**:从内存流中读取图像数据到字节数组中。
5. **转换为BASE64字符串**:利用.NET中的`Convert.ToBase64String`函数将字节数组转换为BASE64编码字符串。
6. **写入文件**:将得到的BASE64字符串写入一个文本段落件。
具体实现代码如下:
```csharp
private void ImgToBase64String(string Imagefilename)
{
try
{
Bitmap bmp = new Bitmap(Imagefilename);
this.pictureBox1.Image = bmp;
FileStream fs = new FileStream(Imagefilename + .txt, FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
MemoryStream ms = new MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] arr = new byte[ms.Length];
ms.Position = 0;
ms.Read(arr, 0, (int)ms.Length);
ms.Close();
string strBase64 = Convert.ToBase64String(arr);
sw.Write(strBase64);
sw.Close();
fs.Close();
}
catch (Exception ex)
{
MessageBox.Show(ImgToBase64String转换失败\nException: + ex.Message);
}
}
```
### 二、BASE64编码转图片
#### 2.1 加载BASE64字符串
用户选择一个包含BASE64字符串的文本段落件。与图片选择类似,这里也使用了`OpenFileDialog`。
```csharp
OpenFileDialog dlg = new OpenFileDialog();
dlg.Multiselect = true;
dlg.Title = 选择要转换的BASE64字符串文件;
dlg.Filter = txt files (*.txt)|*.txt;
```
#### 2.2 转换逻辑
选择完文件后,调用`Base64StringToImage`方法进行转换。该方法的核心步骤包括:
1. **加载BASE64字符串**:从选定的文本段落件中读取BASE64字符串。
2. **转换为字节数组**:使用`Convert.FromBase64String`函数将BASE64字符串转换回字节数组。
3. **创建图像对象**:基于字节数组创建一个新的`Bitmap`对象。
4. **显示图像**:将创建的图像对象显示在窗体上的`pictureBox`控件中。
5. **清理资源**:关闭所有打开的文件流,并删除原始的BASE64文本段落件。
具体实现代码如下:
```csharp
private void Base64StringToImage(string txtFileName)
{
try
{
FileStream ifs = new FileStream(txtFileName, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(ifs);
string inputStr = sr.ReadToEnd();
byte[] arr = Convert.FromBase64String(inputStr);
MemoryStream ms = new MemoryStream(arr);
Bitmap bmp = new Bitmap(ms);
ms.Close();
sr.Close();
ifs.Close();
this.pictureBox2.Image = bmp;
if (File.Exists(txtFileName))
{
File.Delete(txtFileName);
}
}
catch (Exception ex)
{
MessageBox.Show(Base64StringToImage转换失败\nException: + ex.Message);
}
}
```
以上就是如何在.NET C#中实现图片与BASE64编码之间相互转换的详细步骤。这些代码不仅能够帮助开发者快速实现图像数据的网络传输,还能够提高应用程序的灵活性和可用性。