直接显示缩略图

2019-04-15 13:04发布

data/attach/1904/io3c78qtsausnwkffohq1fjhhghsn5u3.jpg 原本想将所有照片生成缩略图之后再在系统上显示缩略图的,却在批量生成缩略图的时候提示了内存不足的情况,找了很久都没找到好方法,所以就找到了以下的解决方法!如果大家有好的批量生成缩略图的方法请赐教!
具体原理是将照片读取,然后直接输出缩略图
<%@ WebHandler Language="C#" Class="GetSmallPhoto" %> using System; using System.Web; using System.Drawing; using System.IO; public class GetSmallPhoto : IHttpHandler { //图片所在文件夹 static string picturesPath = @"F:PIC"; public void ProcessRequest(HttpContext context) { context.Response.ContentType = "image/jpeg"; //获取到传递过来的img字符串,比如 string URL = context.Request.QueryString["URL"]; string img = URL.Replace(System.Configuration.ConfigurationManager.AppSettings["WebURL"] + "/", "");//@"2014ceship2w210212702竞品堆头端架IMG_2557.JPG"; //context.Request.Params["img"]; string path = picturesPath + img; //如果文件存在才会去读取,减少使用try,catch,提高程序性能 if (File.Exists(path)) { //载入这个图片 Image big = Image.FromFile(path); //如果可以获取到文件,才会执行下面的代码 if (big != null) { //设定最大的宽度,可以修改来生成更小的缩略图 int newWidth = 100; //根据图片的宽高比来生成一个位图 Bitmap bitmap = new Bitmap(newWidth, newWidth * big.Height / big.Width); //根据图板来创建一个图画 Graphics g = Graphics.FromImage(bitmap); using (g) { //将大图big画到自己定义的小图中bitmap g.DrawImage(big, 0, 0, bitmap.Width, bitmap.Height); //直接将处理好的位图保存到响应输出流中,格式为jpeg! bitmap.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg); } } } else { //否则就发送一个文件不存在的信息到浏览器 context.Response.ContentType = "text/html"; context.Response.Write("文件不存在"); //或者发送一个文件不存在的图片 //context.Response.WriteFile("todo此处修改为图片所在路径"); } } public bool IsReusable { get { return false; } } }
调用如下:
期数:{QiShu}  周数:{ZhouShu} 大区:{DaQu} 客户:{KeHuLeiXing} 陈列:{ChenLieLeiXing}