base64是网络上最常见的用于传输8Bit字节码编码之一,base64就是一种基于64个可打印字符来表示二进制数据的方法。

由于base64以上优点,所以被广泛应用于计算机的各个领域中。下面通过代码给大家介绍下c# 图片与base64byte数组相互转的方法。网上找的很多方法用base64或byte数组转图片的时候有概率抛出gdi+中发生一般性错误的异常,本文的转图片例子已经解决了这个问题。那么我们先来看下c#如何把图片转成base64

/// <summary>
        /// 将图片数据转换为Base64字符串
        /// </summary>
        /// <param name="bitmap">图片对象</param>
  private static string ToBase64(Bitmap bitmap)
  {
      BinaryFormatter binFormatter = new BinaryFormatter();
      MemoryStream memStream = new MemoryStream();
      binFormatter.Serialize(memStream, bitmap);
      byte[] bytes = memStream.GetBuffer();
      string base64 = Convert.ToBase64String(bytes);
      return base64;
  }

  /// <summary>
        /// 将Base64字符串转换为图片
        /// </summary>
        /// <param name="@base64">base64字符串</param>
  private static Bitmap ToImage(string @base64)
        {
            //将base64头部信息替换
            var tmp = base64.Split(new string[] { "base64," }, StringSplitOptions.None);
            if (tmp.Length == 2)
            {
                @base64 = @tmp[1];
            }
            byte[] bytes = Convert.FromBase64String(@base64);
            using (MemoryStream ms = new MemoryStream(bytes))
            {
                //这一段的作用是解决图片资源占用gdi+错误
                var tmp_bmp = new System.Drawing.Bitmap(ms);
                var new_nmp = new Bitmap(tmp_bmp.Width, tmp_bmp.Height);
                using (Graphics gdi = Graphics.FromImage(new_nmp))
                {
                    gdi.DrawImage(tmp_bmp, 0, 0, tmp_bmp.Width, tmp_bmp.Height);
                    gdi.Dispose();
                }

                return new_nmp;
            }
        }

  /// <summary>
  /// 将图片转为byte数组
  /// </summary>
  /// <param name="bitmap">base64字符串</param>
  public static byte[] ToBuffer(Bitmap bitmap)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                bitmap.Save(ms, ImageFormat.Jpeg);
                return ms.ToArray();
            }
        }

 /// <summary>
 /// 将byte数组转为图片
 /// </summary>
 /// <param name="bitmap">base64字符串</param>
 public static Bitmap ToImage(byte[] buffer)
 {
     using (MemoryStream ms = new MemoryStream(buffer))
     {
         //这一段的作用是解决图片资源占用gdi+错误
         var tmp_bmp = new System.Drawing.Bitmap(ms);
         var new_nmp = new Bitmap(tmp_bmp.Width, tmp_bmp.Height);
         using (Graphics gdi = Graphics.FromImage(new_nmp))
         {
             gdi.DrawImage(tmp_bmp, 0, 0, tmp_bmp.Width, tmp_bmp.Height);
             gdi.Dispose();
         }

         return new_nmp;
     }
 }
最后修改:2022 年 10 月 02 日
如果觉得我的文章对你有用,请随意赞赏