C# 图片处理(压缩、剪裁,转换,优化)

1.图片与二进制的转换

图片转换成二进制主要用于数据库存储及图片数据的应用间传输,如网站服务器通过WebService或WCF从数据处理服务器获取图片数据,就可以以二进制形式传输

///图片转二进制
private byte[] convertByte(Image img)
{
    MemoryStream ms = new MemoryStream();
    img.Save(ms, img.RawFormat);
    //byte[] bytes = new byte[ms.Length];
    //ms.Read(bytes, 0, Convert.ToInt32(ms.Length));
    //以上两句改成下面两句
    byte[] bytes = ms.ToArray();
    ms.Close();
    return bytes;
}

///二进制生成图片
private Image convertImg(byte[] datas)
{
    MemoryStream ms = new MemoryStream(datas);
    Image img = Image.FromStream(ms, true);
    ms.Close();
    return img;
} 

 


2.两种图片加载方式的比较

平常我们一般是这样获取图片的(即以静态文件的方式获取)

<img src="Images/sssss.jpg" />

 

有一种图片加载方式是将内存中的图片数据输出到页面,如下

页面标签

<img src="GetImageHandler.ashx?imgID=sssss" />

后台代码 GetImageHandler.ashx.cs

byte[] file = GetImgData(imgID);//根据图片信息获取图片数据(一般是从服务获取)
Response.ContentType = "image/*";
Response.BinaryWrite(file);

 或者

Image ci = GetImage(imgID);
context.Response.Clear();
context.Response.ContentType = "image/jpeg";
ci.Image.Save(context.Response.OutputStream, ImageFormat.Jpeg); 
ci.Dispose();

 

通过ashx获取与直接获取比较 有以下优缺点

  • 优点:便于管理。因为这种方式需要先经过后台处理才返回内容,在后台就可以进行很多操作了,例如判断当前人的权限是否可加载该图片(根据session);判断当前图片如果不存在的话,返回默认图片;在后台给图片加水印。
  • 缺点1:加载速度慢,效率低。毕竟中间多了一个处理的过程,如果网站流量小,对图片加载速度和网站压力没要求倒无所谓了。。。
  • 缺点2:用户体验差。因为这种方式是先在后台获取到图片的完整数据,然后再拉取到页面。

 

下面分别是两种方式的请求耗时图。(图①是内存方式,图②是普通方式)

 这种加载方式  页面上最直观的效果就是,在第一秒内图片是空白的,然后突然完全显示出来。而普通方式则是由上往下慢慢显示出来


 

 

posted @ 2013-09-30 11:47  TiestoRay  阅读(1852)  评论(1编辑  收藏  举报