首页 > 代码库 > asp.net处理网络返回图片

asp.net处理网络返回图片

本文参考糅合自以下几个网站:

1.参考输出流:http://blog.csdn.net/lusend/article/details/8299398

2.参考二进制流转换(本文没用到):http://developer.51cto.com/art/200908/143612.htm

3.参考bitmap和image之间格式转换:http://www.cnblogs.com/peasana/archive/2012/02/13/2349165.html

4.参考页面不存在的时候返回图片:http://www.cnblogs.com/lema/archive/2010/12/10/1902679.html

5.参考返回无效图片时候,httpcontext用法:http://www.cnblogs.com/fish-li/archive/2013/04/06/3002940.html

6.图片处理主要参考自(这个可以用于,我们本地电脑上的图片处理,画图不好用的时候可以参考这个):http://www.cnblogs.com/qfb620/archive/2010/05/22/1741519.html

不得不说,我对c#略微熟悉,对于asp.net来说,完全是没接触过,虽然传说2个本质上没区别,无奈接了个同事的要求,帮忙处理网络上的大图片,到手机上显示小图。搞了整整半天,才知道我在做的是asp.net,之前的半天,连项目也没建立起来,这种情况下,不能说我这个小白能够完全处理好,达到了理想状态,至少,侥幸能把上百K的图片,变成3到5k了,还是有不少收获的,参考了好多大牛写的文章,开篇已经列出。本文就是对上文文章剪剪裁裁获得的。

一篇好的代码不需要过多注释,相信聪明的你一定能够看懂。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
private const string DefaultimageUrl = "Default.jpg";
 
        protected void Page_Load(object sender, EventArgs e)
        {
            string a = Request.QueryString.Get("id");//这个是指的,传参的时候必须上?id=xx,不然就无效
            HttpR(a);
        }
 
        private void HttpR(string id)
        {
            string uri = "http://xxx" + id + ".jpg";
            WebRequest wreq = WebRequest.Create(uri);
            try
            {
                var wresq = (HttpWebResponse) wreq.GetResponse();
                Stream stream = wresq.GetResponseStream();
                if (stream != null)
                {
                    Image img = Image.FromStream(stream);
                    Convert(img);
                }
            }
            catch (Exception)
            {
                ProcessRequest();
            }
        }
 
        //输出默认图片
        private static void ProcessRequest()
        {
            HttpContext context = HttpContext.Current;
            if (context != null)
            {
                Image image = Image.FromFile(context.Server.MapPath(DefaultimageUrl));
                context.Response.ContentType = "image/jpeg";
                image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
                image.Dispose();
            }
        }
 
        private void Convert(Image picPath)
        {
            var originBmp = (Bitmap) picPath;
            //根据需求调整宽高
            const int width = 80, hight = 110;
            //绘制图片
            var resizedBmp = new Bitmap(width, hight);
            Graphics g = Graphics.FromImage(resizedBmp);
            g.InterpolationMode = InterpolationMode.Low;
            g.SmoothingMode = SmoothingMode.Default;
            g.CompositingQuality = CompositingQuality.HighSpeed;
            g.SmoothingMode = SmoothingMode.HighSpeed;
            g.DrawImage(originBmp, new Rectangle(0, 0, width, hight),
                new Rectangle(0, 0, originBmp.Width, originBmp.Height), GraphicsUnit.Pixel);
            //输出图片
            var ms = new MemoryStream();
            resizedBmp.Save(ms, ImageFormat.Jpeg);
            Response.ClearContent();
            Response.ContentType = "image/Jpeg";
            Response.BinaryWrite(ms.ToArray());
            //释放所有内存流
            g.Dispose();
            resizedBmp.Dispose();
            originBmp.Dispose();
            ms.Dispose();
        }