程序的根本转换方法是应用 .NET Framework 提供的 base64 转换器,其中用到了 ImageFormatGuidToString 办法,这个办法是为了确保图像保留到内存流的时候用的是失常的图像格式。如果是应用 Image 类创立的新图像,那么它的 RawFormat 参数值并不是惯例的格局,这个时候如果应用这种图像格式保留到内存流中会导致失败,具体的异样音讯大略是 “值不能为 null。参数名:encoder”,所以这个中央在图像保留到内存流之前首先查看了现有图像的格局。转换后的 base64 字符串是没有标识头的,要在 HTML 标签中显示须要本人加上头部,如 “data:image/png;base64,...”:
using System;using System.Drawing;using System.Drawing.Imaging;using System.IO;// Image 对象转换为 base64 字符串string ImageToBase64(Image _image){ MemoryStream ms = new MemoryStream(); try { if (ImageFormatGuidToString(_image.RawFormat) == null) { _image.Save(ms, ImageFormat.Png); } else { _image.Save(ms, _image.RawFormat); } byte[] arr = new byte[ms.Length]; ms.Position = 0; ms.Read(arr, 0, (int)ms.Length); return Convert.ToBase64String(arr); } catch { return null; } finally { ms.Close(); }}// base64 字符串转换为 Image 对象Image Base64ToImage(string _base64){ byte[] arr = Convert.FromBase64String(_base64); MemoryStream ms = new MemoryStream(arr); Bitmap bmp = new Bitmap(ms); try { Image result = new Bitmap(bmp.Width, bmp.Height); Graphics g = Graphics.FromImage(result); g.DrawImage(bmp, 0, 0); g.Dispose(); return result; } catch { return null; } finally { bmp.Dispose(); ms.Close(); }}// 用于查看图像格式string ImageFormatGuidToString(ImageFormat _format){ if (_format.Guid == ImageFormat.Bmp.Guid) { return "bmp"; } else if (_format.Guid == ImageFormat.Gif.Guid) { return "gif"; } else if (_format.Guid == ImageFormat.Jpeg.Guid) { return "jpg"; } else if (_format.Guid == ImageFormat.Png.Guid) { return "png"; } else if (_format.Guid == ImageFormat.Icon.Guid) { return "ico"; } else if (_format.Guid == ImageFormat.Emf.Guid) { return "emf"; } else if (_format.Guid == ImageFormat.Exif.Guid) { return "exif"; } else if (_format.Guid == ImageFormat.Tiff.Guid) { return "tiff"; } else if (_format.Guid == ImageFormat.Wmf.Guid) { return "wmf"; } else { return null; }}
相干环境:
.NET Framework 4.0