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

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

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


  • 相关阅读:
    实验4-2-4 换硬币 (20分)
    实验4-1-4 求整数的位数及各位数字之和 (15分)
    实验4-1-10 兔子繁衍问题 (15分)
    实验4-1-7 特殊a串数列求和 (20分)
    实验4-1-3 找出最小值 (20分)
    实验4-1-2 求奇数和 (15分)
    实验4-1-1 最大公约数和最小公倍数 (15分)emmm辗转相除法
    实验3-10 高速公路超速处罚 (15分)
    1.使用Lucene开发自己的搜索引擎--倒排索引基础知识
    办公自动化项目从无到有-第三篇系统管理模块
  • 原文地址:https://www.cnblogs.com/TiestoRay/p/3347047.html
Copyright © 2011-2022 走看看