zoukankan      html  css  js  c++  java
  • 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:用户体验差。因为这种方式是先在后台获取到图片的完整数据,然后再拉取到页面。

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

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


  • 相关阅读:
    cas改造随笔
    数字证书KeyTool使用(第二篇)
    debug.keystore文件不存在解决办法
    SSL安全解决方案(转)
    CAS SSO:汇集配置过程中的错误解决方法
    sso笔记
    获取指定月 获取指定日期是星期几
    协同过滤推荐算法总结
    Java动态代理深入解析
    分享一个前后端分离的轻量级内容管理框架
  • 原文地址:https://www.cnblogs.com/TiestoRay/p/3347047.html
Copyright © 2011-2022 走看看