在XML、文本文件 中存储图片的解决方案

来源:互联网 发布:python爬虫工程师招聘 编辑:程序博客网 时间:2024/05/29 15:47

最近做了个基于CF 2.0上开发的手机程序,当中有一个功能是图片存储,感觉用数据库(SQL CE)存储的话过于复杂和麻烦。同时效率也会降低,不景它是手机,呵呵!为了得到更好移植和方便,我这次使用了二进制+Base64编码形式存储,顺便帖上来,希望对需要的人有点帮助!

思想:图片先转换为 二进制文件  再经 Base64编码 存储在文件中的,由于转换成二进制文件后,数据存储空间变大,利用Base64具有的压缩空间优势,使转换后的文本数据只是原数据大小的4/3倍(大概),图片量大的话,节省不少内存空间。同理,通过原先Base64编码过的文本数据解码成二进制文件后再转换为图片对象。

代码如下:

  1.         //using System.IO;
  2.         //using System.Drawing;
  3.         //using System.Drawing.Imaging;
  4.         //图片转换为字符串
  5.         private string ImageToString(Image img, string ImgFormat)//参数ImgFormat是指定图片的类型
  6.         {
  7.             //定义一个内存流对象
  8.             try
  9.             {
  10.                 using (MemoryStream memoryStream = new MemoryStream())
  11.                 {
  12.                     //把Image以ImageFormat图片类型保存为二进制格式           
  13.                     img.Save(memoryStream, ReImgFormat(ImgFormat));
  14.                     //定义b存放二进制数据
  15.                     byte[] b = memoryStream.GetBuffer();
  16.                     //将二进制数据转换为Base64编码字符串
  17.                     string PicString = Convert.ToBase64String(b);
  18.                     //关闭内存流和清空变量
  19.                     memoryStream.Close();
  20.                     b = null;
  21.                     //返回转换后的字符串
  22.                     return PicString;
  23.                 }
  24.             }
  25.             catch (Exception ex)
  26.             {
  27.                 Console.WriteLine(ex.Message);
  28.                 return ""//返回空字符串
  29.             }
  30.         }
  31.         //字符串转换为图片
  32.         private Image StringToImage(string PicString)
  33.         {
  34.             if (PicString.Equals(""))
  35.             {
  36.                 //字符串为空的时候返回空对象
  37.                 return null;
  38.             }
  39.             else
  40.             {
  41.                 try
  42.                 {
  43.                     using (MemoryStream memoryStream = new MemoryStream(Convert.FromBase64String(PicString)))
  44.                     {
  45.                         Image img = new System.Drawing.Bitmap(memoryStream);
  46.                         memoryStream.Close();
  47.                         return img;
  48.                     }
  49.                 }
  50.                 catch (Exception ex)
  51.                 {
  52.                     Console.WriteLine(ex.Message);
  53.                     return null//返回空对象
  54.                 }
  55.             }
  56.         }
  57.         //返回图片的类型对象
  58.         private ImageFormat ReImgFormat(string imgformat)
  59.         {
  60.             switch (imgformat.ToLower())
  61.             {
  62.                 case "jpg":
  63.                     return ImageFormat.Jpeg;
  64.                 case "gif":
  65.                     return ImageFormat.Gif;
  66.                 case "bmp":
  67.                     return ImageFormat.Bmp;
  68.                 case "png":
  69.                     return ImageFormat.Png;
  70.                 //没有指定类型默认Jpeg
  71.                 default:
  72.                     return ImageFormat.Jpeg;
  73.             }
  74.         }
原创粉丝点击