.NET实现图像与Base64编码的转换

Base64编码是以ASCII文本方式显示的,常用作电子邮件,URI地址,XML中嵌入二进制资源(如SOAP传输)使用。我写了一个可以将图像与Base64编码相互转换的例子。

.NET实现图像与Base64编码的转换

Base64编码的参考:

图像与Base64的转换和画棋盘的代码:

/// <summary> /// 图像转换为Base64编码 /// </summary> /// <param name="image">图像</param> /// <param name="format">图像格式</param> /// <returns>转换成功返回其Base64编码;失败返回空串</returns> public static string ImageToBase64(Image image, ImageFormat format) { string base64String = ""; using (MemoryStream ms = new MemoryStream()) { image.Save(ms, format); byte[] imageBytes = ms.ToArray(); base64String = Convert.ToBase64String(imageBytes); } return base64String; } /// <summary> /// Base64编码转换为图像 /// </summary> /// <param name="base64String">Base64字符串</param> /// <returns>转换成功返回图像;失败返回null</returns> public static Image Base64ToImage(string base64String) { MemoryStream ms = null; Image image = null; try { byte[] imageBytes = Convert.FromBase64String(base64String); ms = new MemoryStream(imageBytes, 0, imageBytes.Length); ms.Write(imageBytes, 0, imageBytes.Length); image = Image.FromStream(ms, true); } catch { } finally { if (ms != null) ms.Close(); } return image; } /// <summary> /// 画一个国际象棋的棋盘 /// </summary> /// <param name="brush1">颜色1(如:Brushes.Black)</param> /// <param name="brush2">颜色2(如:Brushes.White)</param> /// <param name="squareLength">小方格长度</param> /// <param name="squareCountPerLine">每行的小方格个数(比如:8)</param> /// <returns></returns> public static Bitmap DrawChessBoard(Brush brush1, Brush brush2, int squareLength, int squareCountPerLine) { Bitmap bitmap = null; Graphics g = null; try { int boardLength = squareLength * squareCountPerLine; bitmap = new Bitmap(boardLength, boardLength); g = Graphics.FromImage(bitmap); for (int i = 0; i < squareCountPerLine; i++) { for (int j = 0; j < squareCountPerLine; j++) { int im = i % 2, jm = j % 2; Brush brush = im == 0 && jm == 0 || im != 0 && jm != 0 ? brush1 : brush2; g.FillRectangle(brush, i * squareLength, j * squareLength, squareLength, squareLength); } } } catch { //溢出 或 创建位图失败 } finally { if (g != null) g.Dispose(); } return bitmap; }

CONFIG配置文件访问代码:

using System; using System.IO; using System.Reflection; using System.Xml; namespace ImageAndBase64 { /// <summary> /// 管理配置文件 /// </summary> public class ConfigManager { string _configFileName; /// <summary> /// 配置文件名 /// </summary> public string FileName { get { return _configFileName; } } /// <summary> /// 管理应用程序配置文件的类 /// </summary> public ConfigManager() { _configFileName = Assembly.GetExecutingAssembly().Location + ".config"; } /// <summary> /// 管理配置文件的类 /// </summary> /// <param name="configfilename">配置文件名</param> public ConfigManager(string fileName) { try { FileInfo fi = new FileInfo(fileName); if (fi.Exists) _configFileName = fileName; else throw new ArgumentException("fileName"); } catch { GC.SuppressFinalize(this); throw; } } /// <summary> /// 更新配置 /// </summary> /// <param name="key">键</param> /// <param name="value">值</param> /// <returns>是否成功</returns> public bool UpdateConfig(string key, string value) { bool r = false; try { XmlDocument doc = new XmlDocument(); doc.Load(_configFileName); XmlNode node = doc.SelectSingleNode(string.Format(@"//add[@key='{0}']", key)); if (node != null) { XmlElement ele = (XmlElement)node; ele.SetAttribute("value", value); doc.Save(_configFileName); r = true; } } catch { throw; } return r; } /// <summary> /// 读取配置 /// </summary> /// <param name="key">键</param> /// <returns>值</returns> public string ReadConfig(string key) { string r = ""; try { XmlDocument doc = new XmlDocument(); doc.Load(_configFileName); XmlNode node = doc.SelectSingleNode(string.Format(@"//add[@key='{0}']", key)); if (node != null) { XmlElement ele = (XmlElement)node; r = ele.GetAttribute("value"); } } catch { throw; } return r; } } }

App.config

<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="ReadTextFileMaxSize" value="10485760"/> </appSettings> </configuration>

简单图像格式转换:

private void btnImageSave_Click(object sender, EventArgs e) { if (pictureBox1.Image == null) { MessageBox.Show("请先打开一幅图像。", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Asterisk); return; //return } saveFileDialog1.Title = "图像另存为"; saveFileDialog1.Filter = "*.jpg|*.jpg|*.bmp|*.bmp|*.png|*.png|*.gif|*.gif"; saveFileDialog1.FileName = ""; DialogResult dr = saveFileDialog1.ShowDialog(); if (DialogResult.Cancel == dr) return; //return try { //按指定格式保存图像 ImageFormat imageFormat = ImageFormat.Jpeg; switch (Path.GetExtension(saveFileDialog1.FileName).ToLower()) { case ".bmp": imageFormat = ImageFormat.Bmp; break; case ".png": imageFormat = ImageFormat.Png; break; case ".gif": imageFormat = ImageFormat.Gif; break; case ".jpg": default: break; } Bitmap bitmap = new Bitmap(pictureBox1.Image); bitmap.Save(saveFileDialog1.FileName, imageFormat); bitmap.Dispose(); } catch (Exception ex) { MessageBox.Show("ERROR: " + ex.Message); } }

更多的代码下载示例文件:

.NET实现图像与Base64编码的转换

ImageAndBase64.7z

类型: 7Z 压缩文件
大小: 10.3 KB