• C# Base64和图片转换


    Base64和图片转换

        public class FileHelper
        {
            /// <summary>
            /// 通过路径获取文件并处理成Base64
            /// </summary>
            /// <param name="filePath">图片路径</param>
            /// <param name="isVirtualPath">是否虚拟路径</param>
            /// <returns></returns>
            public static string ImgToBase64(string filePath, bool isVirtualPath = true)
            {
                string basePath = AppContext.BaseDirectory;//获取程序根目录
                if (isVirtualPath)
                {
                    var s1 = Directory.GetCurrentDirectory();
                    filePath = $"{basePath}/{filePath}";
                }
                //照片旋转处理
                // RemoveRotateFlip(FilePath);
    
                if (System.IO.File.Exists(filePath))
                {
                    #region Bitmap
    
                    //Bitmap bmp = new Bitmap(filePath);
                    //MemoryStream ms = new MemoryStream();
                    //bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
                    //byte[] arr = new byte[ms.Length];
                    //ms.Position = 0;
                    //ms.Read(arr, 0, (int)ms.Length);
                    //ms.Close();
                    //string strbaser64 = Convert.ToBase64String(arr);
                    //return strbaser64;
    
                    #endregion
    
                    FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                    fs.Seek(0, SeekOrigin.Begin);
                    //图片转base64  
                    byte[] bytes = new byte[fs.Length];
                    fs.Read(bytes, 0, bytes.Length);
                    return Convert.ToBase64String(bytes);
                }
                return "";
            }
    
            /// <summary>
            /// 将Base64处理成图片文件保存到本地
            /// </summary>
            /// <param name="uploadPath">图片保存地址,如:/Content/Images/10000.png</param>
            /// <param name="imgBase64">base64字符串</param>
            /// <returns>返回相对路径</returns>
            public static string Base64ToImagePath(string imgBase64,string uploadPath = "uploadImgPath")
            {
                string basePath = Directory.GetCurrentDirectory(); //AppContext.BaseDirectory;
                string DatePath = DateTime.Now.ToString("yyyyMMdd");//日期子目录
                //AppName = hostingEnvironment.ApplicationName,
                //    ContentRootPath = hostingEnvironment.ContentRootPath,
                //    WebRootPath = hostingEnvironment.WebRootPath,
                //    EnvironmentName = hostingEnvironment.EnvironmentName,
    
                uploadPath = uploadPath + "/" + DatePath + "/"; //所要保存的相对路径
                string folderPath = basePath + "\\" + uploadPath +"\\";
                //目录
                string tmpRootDir = Path.GetDirectoryName(folderPath);
    
                //System.Web.HttpContext context = System.Web.HttpContext.Current;
                //tmpRootDir = System.Web.HttpContext.Current.Server.MapPath(uploadPath); //获取程序根目录 
                //if (context != null)
                //{
                //    tmpRootDir = System.Web.HttpContext.Current.Server.MapPath(uploadPath); //获取程序根目录 
                //}
                ////异步情况
                //else
                //{
                //    tmpRootDir=System.Web.HttpRuntime.AppDomainAppPath + uploadPath;
                //}
                if (!Directory.Exists(tmpRootDir))
                {
                    Directory.CreateDirectory(tmpRootDir);
                }
    
                Thread.Sleep(1);
                string imgName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + GetRandomString(10);
                string fileName = uploadPath +"/"+ imgName + ".jpg";//所要保存的相对路径及名字;//声明一个string类型的相对路径
    
                string imageFullPath = tmpRootDir +"\\"+ imgName + ".jpg"; //转换成绝对路径,保存图片
    
                //取图片的后缀格式
                //string hz = ImgBase64.Split(',')[0].Split(';')[0].Split('/')[1];
                //string[] str = ImgBase64.Split(',');  //base64Str为base64完整的字符串,先处理一下得到我们所需要的字符串
    
                imgBase64 = imgBase64.Replace("data:image/png;base64,", "").Replace("data:image/jgp;base64,", "").Replace("data:image/jpg;base64,", "").Replace("data:image/jpeg;base64,", "").Replace("data:image/jpng;base64,", "");//将base64头部信息替换
                byte[] imageBytes = Convert.FromBase64String(imgBase64);
                //读入MemoryStream对象
                MemoryStream memoryStream = new MemoryStream(imageBytes, 0, imageBytes.Length);
                memoryStream.Write(imageBytes, 0, imageBytes.Length);
                //  转成图片
                Image image = Image.FromStream(memoryStream);
                //   图片名称
                //  string iname = DateTime.Now.ToString("yyMMddhhmmss");
                image.Save(imageFullPath);  // 将图片存到本地Server.MapPath("pic\\") + iname + "." + hz
    
                //照片旋转处理
                //RemoveRotateFlip(imagesurl2);
    
                return fileName;
            }
    
            /// <summary>
            /// Base64转图片
            /// </summary>
            /// <param name="base64"></param>
            /// <param name="fullPath">全路径</param>
            public static void Base64ToImage(string base64, string fullPath)
            {
                try
                {
                    //取图片的后缀格式
                    //string hz = ImgBase64.Split(',')[0].Split(';')[0].Split('/')[1];
                    //string[] str = ImgBase64.Split(',');  //base64Str为base64完整的字符串,先处理一下得到我们所需要的字符串
    
                    base64 = base64.Replace("data:image/png;base64,", "").Replace("data:image/jgp;base64,", "").Replace("data:image/jpg;base64,", "").Replace("data:image/jpeg;base64,", "").Replace("data:image/jpng;base64,", "");//将base64头部信息替换
                    byte[] imageBytes = Convert.FromBase64String(base64);
                    MemoryStream memoryStream = new MemoryStream(imageBytes, 0, imageBytes.Length);
                    memoryStream.Write(imageBytes, 0, imageBytes.Length);
    
                    #region 方法1.Image保存
    
                    //Image image = Image.FromStream(memoryStream);
                    //image.Save(fullPath);
    
                    #endregion
    
                    //方法2
                    Bitmap bp = new Bitmap(memoryStream);
                    bp.Save(fullPath);//注意保存路径
                }
                catch (Exception)
                {
                    throw;
                }
            }
    
            /// <summary>
            /// 获取一个随机数
            /// </summary>
            /// <param name="Num"></param>
            /// <returns></returns>
            public static string GetRandomString(int Num)
            {
                string res = "";
                char[] str = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                               'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
                               'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
                               'U', 'V', 'W', 'X', 'Y', 'Z'};
                Random random = new Random();
                for (var i = 0; i < Num; i++)
                {
                    int num = random.Next(str.Length);
                    res += str[num];
                }
    
                return res;
            }
    
            /// <summary>
            /// 将旋转照片恢复正常
            /// </summary>
            /// <param name="srcPathName"></param>
            public static void RemoveRotateFlip(string srcPathName)
            {
                Image image = new Bitmap(srcPathName);
                //初始化图片对象 
                foreach (var p in image.PropertyItems)
                {
                    if (p.Id == 0x112)
                    {
                        var rft = p.Value[0] == 6 ? RotateFlipType.Rotate90FlipNone
                                : p.Value[0] == 3 ? RotateFlipType.Rotate180FlipNone
                                : p.Value[0] == 8 ? RotateFlipType.Rotate270FlipNone
                                : p.Value[0] == 1 ? RotateFlipType.RotateNoneFlipNone
                                : RotateFlipType.RotateNoneFlipNone;
                        p.Value[0] = 0;  //旋转属性值设置为不旋转
                        image.SetPropertyItem(p); //回拷进图片流
                        image.RotateFlip(rft);
                        image.Save(srcPathName, ImageFormat.Jpeg); //重新保存为正常的图片
                        image.Dispose(); //释放图片对象资源
                                         //File.Delete(srcPathName);//这里是否删除,根据业务需要定
                    }
                }
            }
    
            /// <summary>
            /// MD5
            /// </summary>
            /// <param name="str"></param>
            /// <returns></returns>
            public static string Md5Security(string str)
            {
                var strSecurityPwd = string.Empty;
                try
                {
                    //using (var md5 = MD5.Create())
                    //{
                    //    var result = md5.ComputeHash(Encoding.ASCII.GetBytes(input));
                    //    var strResult = BitConverter.ToString(result);
                    //    return strResult.Replace("-", "");
                    //}
                    using (var md5 = MD5.Create())
                    {
                        byte[] bytValue, bytHash;
                        bytValue = System.Text.Encoding.UTF8.GetBytes(str);
                        bytHash = md5.ComputeHash(bytValue);
                        md5.Clear();
                        string sTemp = "";
                        for (int i = 0; i < bytHash.Length; i++)
                        {
                            sTemp += bytHash[i].ToString("X").PadLeft(2, '0');
                        }
                        strSecurityPwd = sTemp.ToLower();
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
    
                return strSecurityPwd;
            }
    
    
            private static string DESKey = "Jiuyi8899";
    
            #region ========加密========
            /// <summary>
            /// 加密
            /// </summary>
            /// <param name="Text"></param>
            /// <returns></returns>
            public static string Encrypt(string Text)
            {
                return Encrypt(Text, DESKey);
            }
            /// <summary> 
            /// 加密数据 
            /// </summary> 
            /// <param name="Text"></param> 
            /// <param name="sKey"></param> 
            /// <returns></returns> 
            public static string Encrypt(string Text, string sKey)
            {
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                byte[] inputByteArray;
                inputByteArray = Encoding.Default.GetBytes(Text);
                //string value = Md5.Md5Hash(sKey).Substring(0, 8);
                string value = Md5Security(sKey);
                des.Key = ASCIIEncoding.ASCII.GetBytes(value);
                des.IV = ASCIIEncoding.ASCII.GetBytes(value);
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();
                StringBuilder ret = new StringBuilder();
                foreach (byte b in ms.ToArray())
                {
                    ret.AppendFormat("{0:X2}", b);
                }
                return ret.ToString();
            }
    
            #endregion
    
            #region ========解密========
            /// <summary>
            /// 解密
            /// </summary>
            /// <param name="Text"></param>
            /// <returns></returns>
            public static string Decrypt(string Text)
            {
                if (!string.IsNullOrEmpty(Text))
                {
                    return Decrypt(Text, DESKey);
                }
                else
                {
                    return "";
                }
            }
            /// <summary> 
            /// 解密数据 
            /// </summary> 
            /// <param name="Text"></param> 
            /// <param name="sKey"></param> 
            /// <returns></returns> 
            public static string Decrypt(string Text, string sKey)
            {
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                int len;
                len = Text.Length / 2;
                byte[] inputByteArray = new byte[len];
                int x, i;
                for (x = 0; x < len; x++)
                {
                    i = Convert.ToInt32(Text.Substring(x * 2, 2), 16);
                    inputByteArray[x] = (byte)i;
                }
                //string value = Md5.Md5Hash(sKey).Substring(0, 8);
                string value = Md5Security(sKey);
                des.Key = ASCIIEncoding.ASCII.GetBytes(value);
                des.IV = ASCIIEncoding.ASCII.GetBytes(value);
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);
                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();
                return Encoding.Default.GetString(ms.ToArray());
            }
    
            #endregion
    
        }
    View Code
  • 相关阅读:
    IEqualityComparer<T> 重写注意事项
    InfoPath使用Sharepoint Webservice之多参数
    强制使用office web Apps新建文档
    SQL 分组取每组第N行数据
    Sharepoint Ribbon 开启右键菜单(此文作废)
    sharepoint 2010 Infopath 备忘
    sharepoint windows认证模式下 限制人员选取器能访问OU
    Unable to load configuration异常处理
    Java数据库连接池的配置
    No Suitable Driver Found 解决方法
  • 原文地址:https://www.cnblogs.com/love201314/p/16325941.html
Copyright © 2020-2023  润新知