将图像转换为 Base64 格式并从 Base64 格式转换回来
使用 System.Convert 命名空间在 base64 和图像之间转换
教程 - 第 1 部分
首先,我想欢迎您来到本教程的第 1 部分。 我叫 Charles Henington,我将解释如何使用 System.Convert
命名空间将文件转换为 base64 string
。 在下一个教程中,我们将开始将这些 string
转换为 Image
。(注意:base64 string
必须是图像的,但我们稍后会详细介绍。)System.Convert
命名空间是一个非常有趣的命名空间,它允许我们转换许多不同的变量。 今天我们将关注两个变量:
Convert.ToBase64String
和Convert.FromBase64String
Using 语句
今天我们将使用的 using
语句是:
using System;
using System.IO;
using Sytem.Windows.Forms;
准备工作
您首先需要启动一个新的 Windows 窗体应用程序。现在我们有了这个,右键单击窗体并选择“查看代码”。现在,您会看到一段类似这样的代码:
using System;
using System.IO;
using Sytem.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}
现在,我们将开始向我们的 Form
添加控件。 首先,添加四个按钮,并将 button1
的名称属性更改为 btnOpen
,button2
更改为 btnSave
,button3
更改为 btnConvert2String
,button4
更改为 btnConvert2Byte
。 现在我们完成了这个,我们可以添加 2 个名为 mOpen
和 mSave
的 string
,以及两个名为 mOriginalData
和 mConvertedData
的 byte[]
值。 现在打开设计器并单击一次 button1
,现在按住 shift 键,然后一次单击其他三个按钮。 现在应该选中所有 4 个按钮,释放 shift 键并双击 button4
。 现在,我们的代码应该如下所示:
using System;
using System.IO;
using Sytem.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private string mOpen, mSave;
private byte[] mOriginalData, mConvertedData;
public Form1()
{
InitializeComponent();
}
private void btnConvert2Byte_Click(object sender, EventArgs e)
{
}
private void btnSave_Click(object sender, EventArgs e)
{
}
private void btnConvert2String_Click(object sender, EventArgs e)
{
}
private void btnOpen_Click(object sender, EventArgs e)
{
}
}
}
编写我们的代码以将文件转换为 base64 格式
现在我们有了 using
语句、strings
、byte[]
值和按钮单击事件,我们可以开始编写我们的代码。 在 btnOpen_Click
事件中,我们将使用以下代码:
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.Cancel)
return;
mOpen = ofd.FileName;
在 btnSave_Click
事件中,我们将使用:
SaveFileDialog sfd = new SaveFileDialog();
if (sfd.ShowDialog() == DialogResult.Cancel)
return;
mSave = sfd.FileName;
现在,我们进入 btnConvertToString_Click
和 btnConvertToByte_Click
事件。 这是代码变得有趣的地方,因为这是所有魔力发生的地方。 单击事件分别命名为它们执行的操作。(注意:将项目命名为它们的作用,以便您以后更容易添加到代码中。)convertToString
将保存一个文件,其中包含我们将加载的文件的 base64string
值,而 convertToByte
将从我们加载的 base64string
保存文件。(注意:读取 base64string
时,如果数据未正确对齐 (base64
文件被更改并且与 base64
结构不正确匹配),应用程序将抛出 base64 string
错误。 ConvertToString
方法如下所示:
Stream stream = File.OpenRead(mOpen);
mOriginalData = new byte[stream.Length];
stream.Read(mOriginalData, 0, mOriginalData.Length);
stream.Flush();
stream.Close();
StreamWriter sw = new StreamWriter(mSave);
sw.Write(Convert.ToBase64String(mOriginalData));
sw.Flush(); sw.Close();
ConvertToByte
方法如下所示:
StreamReader sr = new StreamReader(mOpen);
mConvertedData = Convert.FromBase64String(sr.ReadToEnd());
sr.Close();
Stream stream = File.Create(mSave);
stream.Write(mConvertedData, 0, mConvertedData.Length);
stream.Flush();
stream.Close();
现在我们的代码已完成并准备好将文件转换为它们的 base64 string
和 base64 strings
到文件。 我们的完整代码如下所示:
using System;
using System.IO;
using Sytem.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private string mOpen, mSave;
private byte[] mOriginalData, mConvertedData;
public Form1()
{
InitializeComponent();
}
private void btnConvert2Byte_Click(object sender, EventArgs e)
{
StreamReader sr = new StreamReader(mOpen);
mConvertedData = Convert.FromBase64String(sr.ReadToEnd());
sr.Close();
Stream stream = File.Create(mSave);
stream.Write(mConvertedData, 0, mConvertedData.Length);
stream.Flush();
stream.Close();
}
private void btnSave_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
if (sfd.ShowDialog() == DialogResult.Cancel)
return;
mSave = sfd.FileName;
}
private void btnConvert2String_Click(object sender, EventArgs e)
{
Stream stream = File.OpenRead(mOpen);
mOriginalData = new byte[stream.Length];
stream.Read(mOriginalData, 0, mOriginalData.Length);
stream.Flush();
stream.Close();
StreamWriter sw = new StreamWriter(mSave);
sw.Write(Convert.ToBase64String(mOriginalData));
sw.Flush(); sw.Close();
}
private void btnOpen_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.Cancel)
return;
mOpen = ofd.FileName;
}
}
}
历史
- 2011 年 4 月 9 日:初始帖子