欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# 图片与Base64码的相互转化问题(代码详解)

程序员文章站 2023-11-18 17:35:04
base64是网络上最常见的用于传输8bit字节码的编码方式之一,base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看rfc2045~rfc2049,上面有mime的详细规范。bas...

base64是网络上最常见的用于传输8bit字节码的编码方式之一,base64就是一种基于64个可打印字符来表示二进制数据的方法。可查看rfc2045~rfc2049,上面有mime的详细规范。
base64编码是从二进制到字符的过程,可用于在http环境下传递较长的标识信息。采用base64编码具有不可读性,需要解码后才能阅读。
base64由于以上优点被广泛应用于计算机的各个领域,然而由于输出内容中包括两个以上“符号类”字符(+, /, =),不同的应用场景又分别研制了base64的各种“变种”。为统一和规范化base64的输出,base62x被视为无符号化的改进版本。

下面通过代码给大家介绍下c# 图片与base64相互转化问题,代码如下所示:

public actionresult uploadsignature2(string src_data)
    {
      class1.base64strtoimage(src_data, "c:\\users\\45448\\desktop\\1\\"+ datetime.now.tostring("yyyymmddhhss") + ".png");
      return json(1, jsonrequestbehavior.allowget);
    }

    /// <summary>
    /// 将base64字符串转换为图片并保存到本地
    /// </summary>
    /// <param name="base64str">base64字符串</param>
    /// <param name="savepath">图片保存地址,如:/content/images/10000.png</param>
    /// <returns></returns>
    public static bool base64strtoimage(string base64str, string savepath)
    {
      var ret = true;
      try
      {
        base64str = base64str.replace("data:image/png;base64,", "").replace("data:image/jgp;base64,", "")
          .replace("data:image/jpg;base64,", "").replace("data:image/jpeg;base64,", ""); //将base64头部信息替换
        var bitmap = base64strtoimage(base64str);
        if (bitmap != null)
        {
          //创建文件夹
          var folderpath = savepath.substring(0, savepath.lastindexof('\\'));
          ////filehelper.createdir(folderpath);
          if (!directory.exists(folderpath))
          {
            directory.createdirectory(folderpath);
          }
          //图片后缀格式
          var suffix = savepath.substring(savepath.lastindexof('.') + 1,
            savepath.length - savepath.lastindexof('.') - 1).tolower();
          var suffixname = suffix == "png"
            ? imageformat.png
            : suffix == "jpg" || suffix == "jpeg"
              ? imageformat.jpeg
              : suffix == "bmp"
                ? imageformat.bmp
                : suffix == "gif"
                  ? imageformat.gif
                  : imageformat.jpeg;

          //这里复制一份对图像进行保存,否则会出现“gdi+ 中发生一般性错误”的错误提示
          var bmpnew = new bitmap(bitmap);
          bmpnew.save(savepath, suffixname);
          bmpnew.dispose();
          bitmap.dispose();
        }
        else
        {
          ret = false;
        }
      }
      catch (exception ex)
      {
        ret = false;
      }
      return ret;
  
    }
/// <summary>
    /// image 转成 base64
    /// </summary>
    /// <param name="filefullname"></param>
    public static string imagetobase64(string filefullname)
    {
      try
      {
        bitmap bmp = new bitmap(filefullname);
        memorystream ms = new memorystream();
        var suffix = filefullname.substring(filefullname.lastindexof('.') + 1,
          filefullname.length - filefullname.lastindexof('.') - 1).tolower();
        var suffixname = suffix == "png"
          ? imageformat.png
          : suffix == "jpg" || suffix == "jpeg"
            ? imageformat.jpeg
            : suffix == "bmp"
              ? imageformat.bmp
              : suffix == "gif"
                ? imageformat.gif
                : imageformat.jpeg;

        bmp.save(ms, suffixname);
        byte[] arr = new byte[ms.length]; ms.position = 0;
        ms.read(arr, 0, (int)ms.length); ms.close();
        return convert.tobase64string(arr);
      }
      catch (exception ex)
      {
        return null;
      }
    }

到此这篇关于c# 图片与base64码的相互转化问题(代码详解)的文章就介绍到这了,更多相关c# 图片与base64相互转化内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!