首页 > 编程语言 >C#中图片与BASE64码互相转换

C#中图片与BASE64码互相转换

时间:2023-11-06 17:38:01浏览次数:26  
标签:转换 bmp2 filePath C# BASE64 System Imaging Save Drawing

//保存目录
            string dir = "/upload/user/head";
            //站点文件目录
            string fileDir = HttpContext.Current.Server.MapPath("~" + dir);
            //文件名称
            string fileName = "headdemo" + DateTime.Now.ToString("yyyyMMddHHmmssff");
            //保存文件所在站点位置
            string filePath = Path.Combine(fileDir, fileName);

            if (!System.IO.Directory.Exists(fileDir))
                System.IO.Directory.CreateDirectory(fileDir);

            //读图片转为Base64String
            System.Drawing.Bitmap bmp1 = new System.Drawing.Bitmap(Path.Combine(fileDir, "default.jpg"));
            using (MemoryStream ms1 = new MemoryStream())
            {
                bmp1.Save(ms1, System.Drawing.Imaging.ImageFormat.Jpeg);
                byte[] arr1 = new byte[ms1.Length];
                ms1.Position = 0;
                ms1.Read(arr1, 0, (int)ms1.Length);
                ms1.Close();
                UserPhoto = Convert.ToBase64String(arr1);
            }

            //将Base64String转为图片并保存
            byte[] arr2 = Convert.FromBase64String(UserPhoto);
            using (MemoryStream ms2 = new MemoryStream(arr2))
            {
                System.Drawing.Bitmap bmp2 = new System.Drawing.Bitmap(ms2);
                bmp2.Save(filePath + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                //bmp2.Save(filePath + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp);
                //bmp2.Save(filePath + ".gif", System.Drawing.Imaging.ImageFormat.Gif);
                //bmp2.Save(filePath + ".png", System.Drawing.Imaging.ImageFormat.Png);
            }
//将Base64String转为图片并保存
                        byte[] arr2 = Convert.FromBase64String(UserPhoto);
                        using (MemoryStream ms2 = new MemoryStream(arr2))
                        {
                            System.Drawing.Bitmap bmp2 = new System.Drawing.Bitmap(ms2);
                            ////只有把当前的图像复制一份,然后把旧的Dispose掉,那个文件就不被锁住了,
                            ////这样就可以放心覆盖原始文件,否则GDI+一般性错误(A generic error occurred in GDI+)
                            //System.Drawing.Bitmap bmpNew = new System.Drawing.Bitmap(bmp2);
                            //bmp2.Dispose();
                            //bmp2 = null;
                            bmp2.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg);
                            //bmp2.Save(filePath + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                            //bmp2.Save(filePath + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp);
                            //bmp2.Save(filePath + ".gif", System.Drawing.Imaging.ImageFormat.Gif);
                            //bmp2.Save(filePath + ".png", System.Drawing.Imaging.ImageFormat.Png);
                            bmp2.Dispose();
                        }

 

标签:转换,bmp2,filePath,C#,BASE64,System,Imaging,Save,Drawing
From: https://www.cnblogs.com/leebokeyuan/p/11248920.html

相关文章

  • Linux虚拟机联网教程(CentOS 7 64位)
    Linux联网第一步确保Linux虚拟机在关闭状态下操作,点击编辑虚拟机设置,然后在硬件条件下查看网络适配器设置,选择NTA模式。如图: 第二步在虚拟机界面下,选择编辑条件下的虚拟网络编辑器。如图: 之后也选择为NAT模式,“将主机虚拟适配器连接到此网络”也勾上。如图: 第三步......
  • C#解析JSON字符串总结
    JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串。操作JSON通常有以下几种方式:1.原始方式:按照JSON字符串自己来解析。 2.通用方式【★★★★★】:这种方式是使用开源的类库Newtonsoft.Json(下载地址http://json.codeplex.com/)。下载后添加dll引用就......
  • (八)C#编程基础复习——for循环
    在某些情况下,我们可能需要重复执行某些代码,这时就需要用到C#中的循环语句,C#中支持for循环、foreach循环、while循环和dowhile循环等循环语句,使用for循环可以重复一部分代码,而且重复的次数是可以设定的,流程如下:代码示例:for(inti=1;i<=9;i++){Console.Write......
  • 视频集中存储/云存储EasyCVR启动后查询端口是否被占用出错,该如何解决?
    安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力,也具备接入AI智能分析的......
  • C语言结构体指针
    C语言结构体指针当一个指针变量指向结构体时,称它为结构体指针。C语言结构体指针的定义形式一般为:struct结构体名*变量名;下面是一个定义结构体指针的实例://结构体structstu{char*name;//姓名intnum;//学号intage;//年龄chargroup;//所在小组floatscor......
  • C++中如何返回数组类型数据
    错误示范:int*test01(){ intdata[3]={1,2,3}; returndata;}intmain(){ int*result=test01(); for(inti=0;i<3;i++){ cout<<result[i]<<'\t'; }}正确示范:int*test01(){// intdata[3]={1,2,3}; int*da......
  • Linux下用文件IO的方式操作GPIO(/sys/class/gpio)
    通过sysfs方式控制GPIO,先访问/sys/class/gpio目录,向export文件写入GPIO编号,使得该GPIO的操作接口从内核空间暴露到用户空间,GPIO的操作接口包括direction和value等,direction控制GPIO方向,而value可控制GPIO输出或获得GPIO输入。文件IO方式操作GPIO,使用到了4个函数open、close、read......
  • 国产MIPI转eDP方案|低成本替代LT6911方案|CS5523规格书
    ASLCS5523是MIPI DSI输入、DP/eDP输出转换芯片。MIPIDSI最多支持4个通道,每个通道的最大运行速度为1.5Gps。对于DP1.2输出,它由4个数据通道组成,支持1.62Gbps和2.7Gbps的链路速率。支持1.62Gbps和2.7Gbps的链路速率。它支持2560的最高分辨率*1440@60Hz.它只能使用单个1.8V电源,以......
  • SQLserver、MYSQL、Oracle复制表结构和数据语句
    1.SQLserver语法select*into新表名from旧表名;2.mysql语法CREATETABLE新表名SELECT*FROM旧表;Oracle语法CREATETABLE新表ASSELECT*FROM旧表;......
  • 文心一言 VS 讯飞星火 VS chatgpt (129)-- 算法导论11.1 4题
    四、用go语言,我们希望在一个非常大的数组上,通过利用直接寻址的方式来实现一个字典。开始时该数组中可能包含一些无用信息,但要对整个数组进行初始化是不太实际的,因为该数组的规模太大。请给出在大数组上实现直接寻址字典的方案。每个存储对象占用O(1)空间;SEARCH、INSERT和DELETE操......