65.9K
CodeProject 正在变化。 阅读更多。
Home

将图像转换为 Base64 格式并从 Base64 格式转换回来

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.11/5 (7投票s)

2011年4月9日

CPOL

2分钟阅读

viewsIcon

34731

使用 System.Convert 命名空间在 base64 和图像之间转换

教程 - 第 1 部分

首先,我想欢迎您来到本教程的第 1 部分。 我叫 Charles Henington,我将解释如何使用 System.Convert 命名空间将文件转换为 base64 string。 在下一个教程中,我们将开始将这些 string 转换为 Image。(注意base64 string 必须是图像的,但我们稍后会详细介绍。)System.Convert 命名空间是一个非常有趣的命名空间,它允许我们转换许多不同的变量。 今天我们将关注两个变量:

  1. Convert.ToBase64String
  2. 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 的名称属性更改为 btnOpenbutton2 更改为 btnSavebutton3 更改为 btnConvert2Stringbutton4 更改为 btnConvert2Byte。 现在我们完成了这个,我们可以添加 2 个名为 mOpenmSavestring,以及两个名为 mOriginalDatamConvertedDatabyte[] 值。 现在打开设计器并单击一次 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 语句、stringsbyte[] 值和按钮单击事件,我们可以开始编写我们的代码。 在 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_ClickbtnConvertToByte_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 stringbase64 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 日:初始帖子
© . All rights reserved.