Note(13):C#对Base-64格式对图片进行解码和编码

本文介绍了一种实现图片Base64编码和解码的方法,包括如何将图片转换为Base64字符串以及如何从Base64字符串还原图片。通过编码按钮事件,可将图片编码成Base64字符串;通过解码代码,可将Base64字符串转换回图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.解码

码源:

data:image/gif;base64,R0lGODlhWQAnAPcAAAAAAAICAgUFBQYGBgcHBwgICAkJCQoKCgsLCw0NDQ4ODhAQEBISEhMTExYWFhkZGRoaGhwcHB8fHyEhISQkJCUlJScnJyoqKisrKywsLDIyMjMzMzQ0NDU1NTg4ODw8PD4+PkBAQEFBQUJCQkNDQ0ZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFRUVFVVVVZWVldXV1hYWFpaWlxcXF1dXV5eXmBgYGFhYWRkZGVlZWZmZmdnZ2hoaGtra2xsbG1tbW5ubm9vb3BwcHR0dHZ2dnd3d3t7e35+fn9/f4CAgIKCgoSEhIWFhYaGhoiIiIqKio2NjY6Ojo+Pj5CQkJGRkZWVlZaWlpqamp2dnZ+fn6CgoKGhoaKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq66urrCwsLOzs7a2tre3t7i4uLm5ubu7u7y8vL29vb6+vsDAwMPDw8TExMXFxcbGxsfHx8jIyMnJycvLy83Nzc/Pz9DQ0NLS0tPT09TU1NXV1dfX19jY2NnZ2dra2tvb29zc3N7e3uDg4OHh4ePj4+Xl5ebm5ujo6Orq6uvr6+3t7e/v7/Dw8PHx8fPz8/T09PX19ff39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAWQAnAAAI/wBFCRxIsKDBgwgTKlzIsKHCTH3kOJxIsaLFgopGdChzsaPHjwRnJDEDsqTJhqAagKlzsqVLUaHIjPmCQEynlzg/bnLxRpSMFGNyCr2oY4lAEFU4Dl3aMM+BSaIqHQhD6GOoJUFMPGF6sYcLgVYgnAFph4OoSwQEca2IIocoRCBwcGEDNSEnSnYBCcTAMtJah1wU/EgD5ISIRApBGdnEENIETaL+bPnbkBIngZYYTmG5ENQMOAOVqKV88tIKhp92tCEIiQbpk12wLOSEY44oTVcGrpD0cRGNDxZUGFoLQ89CJgkoUJBgZGCSLh8tOBHFiQUFT1wlPBq45oKHT6KaPP/Ak1BLEI+gQihlA2C0wO7fw48HSQnA5YGFBuxxMyTJooRofHDSGAHgRVB++/X3n0AWNOjggxA2qIVAhQhgEA1K+MCQGxUU1AkJIIYYohAKtWDDQRhqaNIeBhhExgB0MBSHAwWFgsiNOOLYSHkZVHLQizGadAcCBkUxwCAMzcFASVeU4ONBRiJpkiAFFHRJESZIwdAbE3jowpdggnmEQaAUocNNk9hG0JVZnuQIAAPBkUcNjUixQSgLqaFBjX706aefhxSUyQszBCKIIFkUEeecdd550gKYCIQEA0ExEkEMQSLkxYkddQHAp6AqKimloliKqUkiINIRFFS8lhBEEi2T9ARJF9mgl6sGZbQRQ4rccBEnJOCKkEi0LsTDjhWBgYawZKrEEnzgiUfeQJKMSRElRDA7UEwz1XSTKAjy519Bh0BCER+MabtTTz8FNVCK2r5U1FFJEQRkvC05BZVUVBEUJb4neQWWWGtiqSXAJbX1VlxzTSInnXbiifBHgQ1W2GGiTFrppZlOfJFlmHks8sgkMxsQADs=


译成目标对象:


解码代码:

  private static Bitmap ToImage(string text)

        {

            string base64 = text;
            byte[] bytes = Convert.FromBase64String(base64);

            MemoryStream memStream = new MemoryStream(bytes);

            BinaryFormatter binFormatter = new BinaryFormatter();

            //Image img = (Image)binFormatter.Deserialize(memStream);


            MemoryStream ms = new MemoryStream(bytes);

          Bitmap bmp = new Bitmap(ms);

            return bmp;

        }

 private void button1_Click(object sender, EventArgs e)
        {
            //GetHtml();
            pictureBox1.Image = ToImage(textBox2.Text);

        }

注意:

解码时,传入Base-64 字符串时,一定不能携带”data:image/gif;base64,“前缀。小编在此就走了很多弯路。


项目演示:

点击生成:

生成译码图像


 

2.编码

目标图像:

目标编码:

data:image/gif;base64,R0lGODlhWQAnAPcAAAAAAAICAgUFBQYGBgcHBwgICAkJCQoKCgsLCw0NDQ4ODhAQEBISEhMTExYWFhkZGRoaGhwcHB8fHyEhISQkJCUlJScnJyoqKisrKywsLDIyMjMzMzQ0NDU1NTg4ODw8PD4+PkBAQEFBQUJCQkNDQ0ZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFRUVFVVVVZWVldXV1hYWFpaWlxcXF1dXV5eXmBgYGFhYWRkZGVlZWZmZmdnZ2hoaGtra2xsbG1tbW5ubm9vb3BwcHR0dHZ2dnd3d3t7e35+fn9/f4CAgIKCgoSEhIWFhYaGhoiIiIqKio2NjY6Ojo+Pj5CQkJGRkZWVlZaWlpqamp2dnZ+fn6CgoKGhoaKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq66urrCwsLOzs7a2tre3t7i4uLm5ubu7u7y8vL29vb6+vsDAwMPDw8TExMXFxcbGxsfHx8jIyMnJycvLy83Nzc/Pz9DQ0NLS0tPT09TU1NXV1dfX19jY2NnZ2dra2tvb29zc3N7e3uDg4OHh4ePj4+Xl5ebm5ujo6Orq6uvr6+3t7e/v7/Dw8PHx8fPz8/T09PX19ff39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAWQAnAAAI/wBFCRxIsKDBgwgTKlzIsKHCTH3kOJxIsaLFgopGdChzsaPHjwRnJDEDsqTJhqAagKlzsqVLUaHIjPmCQEynlzg/bnLxRpSMFGNyCr2oY4lAEFU4Dl3aMM+BSaIqHQhD6GOoJUFMPGF6sYcLgVYgnAFph4OoSwQEca2IIocoRCBwcGEDNSEnSnYBCcTAMtJah1wU/EgD5ISIRApBGdnEENIETaL+bPnbkBIngZYYTmG5ENQMOAOVqKV88tIKhp92tCEIiQbpk12wLOSEY44oTVcGrpD0cRGNDxZUGFoLQ89CJgkoUJBgZGCSLh8tOBHFiQUFT1wlPBq45oKHT6KaPP/Ak1BLEI+gQihlA2C0wO7fw48HSQnA5YGFBuxxMyTJooRofHDSGAHgRVB++/X3n0AWNOjggxA2qIVAhQhgEA1K+MCQGxUU1AkJIIYYohAKtWDDQRhqaNIeBhhExgB0MBSHAwWFgsiNOOLYSHkZVHLQizGadAcCBkUxwCAMzcFASVeU4ONBRiJpkiAFFHRJESZIwdAbE3jowpdggnmEQaAUocNNk9hG0JVZnuQIAAPBkUcNjUixQSgLqaFBjX706aefhxSUyQszBCKIIFkUEeecdd550gKYCIQEA0ExEkEMQSLkxYkddQHAp6AqKimloliKqUkiINIRFFS8lhBEEi2T9ARJF9mgl6sGZbQRQ4rccBEnJOCKkEi0LsTDjhWBgYawZKrEEnzgiUfeQJKMSRElRDA7UEwz1XSTKAjy519Bh0BCER+MabtTTz8FNVCK2r5U1FFJEQRkvC05BZVUVBEUJb4neQWWWGtiqSXAJbX1VlxzTSInnXbiifBHgQ1W2GGiTFrppZlOfJFlmHks8sgkMxsQADs=


项目解释:

1.制作了一个上传按钮,目的是可以打开一个文件对话框,把我们需要读取的图片文件名字赋给textbox3。

2.点击获取图片,就可以获得目标图像。

 

3.我们获取这个图像的目的,是让这个picturebox保存我们需要的图片,然后在我们编码的时候,可以根据picturebox读取图片的Bitmap数据类型,来实现编码。


项目演示:

1.先点击上传,将文件路径置入textbox里。

上传按钮点击事件代码如下:

  OpenFileDialog openFileDialog = new OpenFileDialog();
  openFileDialog.InitialDirectory = "D:\\江锦\\";
 openFileDialog.Filter = "图片文件|*.*|图片文件|*.jip|所有文件|*.*";
            openFileDialog.RestoreDirectory = true;
            openFileDialog.FilterIndex = 1;
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                textBox3.Text = openFileDialog.FileName;
                FileInfo fileOpen = new FileInfo(textBox3.Text);
               
            }

代码图:

 

2.第二步就是获取图片到picturebox里。

获取图片按钮事件代码:


            FileStream fs = File.OpenRead(textBox3.Text); //OpenRead
            int filelength = 0;
            filelength = (int)fs.Length; //获得文件长度
            Byte[] image = new Byte[filelength]; //建立一个字节数组
            fs.Read(image, 0, filelength); //按字节流读取
            System.Drawing.Image result = System.Drawing.Image.FromStream(fs);
            fs.Close();
            Bitmap bit = new Bitmap(result);
            pictureBox2.Image = bit;

代码图:

3.第三步,将图片编码成Base64字符串。

编码按钮事件代码:

  private void button4_Click(object sender, EventArgs e)
        {
            string head = @"data:image/gif;base64,";
           textBox2.Text=head+ ToBase64(pictureBox2.Image);

        }

  private string ToBase64(Image image1)

        {

            Image img = image1;

            BinaryFormatter binFormatter = new BinaryFormatter();

            MemoryStream memStream = new MemoryStream();

            binFormatter.Serialize(memStream, img);

            byte[] bytes = memStream.GetBuffer();

            string base64 = Convert.ToBase64String(bytes);

            return base64;

        }

代码图:

 


总结

主要涉及到封装两个方法。

第一个是编码方法:

private string ToBase64(Image image1)

        {

            Image img = image1;

            BinaryFormatter binFormatter = new BinaryFormatter();

            MemoryStream memStream = new MemoryStream();

            binFormatter.Serialize(memStream, img);

            byte[] bytes = memStream.GetBuffer();

            string base64 = Convert.ToBase64String(bytes);

            return base64;

        }

它的目的是将图片,编码成Base64字符串。

而第二个是解码方法:

private static Bitmap ToImage(string text)

        {

            string base64 = text;
            byte[] bytes = Convert.FromBase64String(base64);

            MemoryStream memStream = new MemoryStream(bytes);

            BinaryFormatter binFormatter = new BinaryFormatter();

            //Image img = (Image)binFormatter.Deserialize(memStream);


            MemoryStream ms = new MemoryStream(bytes);

          Bitmap bmp = new Bitmap(ms);

            return bmp;

        }

 它的目的是将Base64字符串,编码成图片。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值