将图像转换为 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 日:初始帖子



