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}