手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >asp.net生成缩略图示例方法分享
asp.net生成缩略图示例方法分享
摘要:做站的时候经常会遇到要生成缩略图的功能,因为可能不同的情况需要用来不同大小的缩略图。本文生成的图片都为正方形,只有正方形的缩略图才是保证图片...

做站的时候经常会遇到要生成缩略图的功能,因为可能不同的情况需要用来不同大小的缩略图。

本文生成的图片都为正方形,只有正方形的缩略图才是保证图片足够清晰。

当我我这里说的正方形是先按比例压缩,然后加一个固定的白底 然后居中显示。

代码:

新建outputimg.ashx

复制代码 代码如下:

//调整图片大小

private static Size NewSize(int maxWidth, int maxHeight, int Width, int Height)

{

double w = 0.0;

double h = 0.0;

double sw = Convert.ToDouble(Width);

double sh = Convert.ToDouble(Height);

double mw = Convert.ToDouble(maxWidth);

double mh = Convert.ToDouble(maxHeight);

if (sw < mw && sh < mh)//如果maxWidth和maxHeight大于源图像,则缩略图的长和高不变

{

w = sw;

h = sh;

}

else if ((sw / sh) > (mw / mh))

{

w = maxWidth;

h = (w * sh) / sw;

}

else

{

h = maxHeight;

w = (h * sw) / sh;

}

return new Size(Convert.ToInt32(w), Convert.ToInt32(h));

}

复制代码 代码如下:

//生成缩略图

public static void SendSmallImage(string filename, string newfile, int maxHeight, int maxWidth, string mode)

{

System.Drawing.Image img = System.Drawing.Image.FromFile(filename);//源图像的信息

System.Drawing.Imaging.ImageFormat thisformat = img.RawFormat; //源图像的格式

Size newSize = NewSize(maxWidth, maxHeight, img.Width, img.Height); //返回调整后的图像Width与Height

Bitmap outBmp = new Bitmap(maxWidth, maxHeight);

Graphics g = Graphics.FromImage(outBmp);

//设置画布的描绘质量

g.CompositingQuality = CompositingQuality.HighQuality;

g.SmoothingMode = SmoothingMode.HighQuality;

g.InterpolationMode = InterpolationMode.HighQualityBicubic;

g.Clear(Color.White);

g.DrawImage(img, new Rectangle(((maxWidth - newSize.Width) / 2), ((maxHeight - newSize.Height) / 2), newSize.Width, newSize.Height), 0, 0, img.Width, img.Height, GraphicsUnit.Pixel);

g.Dispose();

//以下代码为保存图片时,设置压缩质量

EncoderParameters encoderParams = new EncoderParameters();

long[] quality = new long[1];

quality[0] = 100;

EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);

encoderParams.Param[0] = encoderParam;

//获取包含有关内置图像编码解码器的信息的ImageCodecInfo对象。

ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();

ImageCodecInfo jpegICI = null;

for (int x = 0; x < arrayICI.Length; x++)

{

if (arrayICI[x].FormatDescription.Equals("JPEG"))

{

jpegICI = arrayICI[x];//设置jpeg编码

break;

}

}

if (jpegICI != null)

{

outBmp.Save(newfile, jpegICI, encoderParams);

}

else

{

outBmp.Save(newfile, thisformat);

}

img.Dispose();

outBmp.Dispose();

}

输出图片:

复制代码 代码如下:

//输出图片

public static void OutPutImg(string imgFilePath)

{

FileStream fs = new FileStream(HttpContext.Current.Server.MapPath(imgFilePath), FileMode.Open, FileAccess.Read);

DateTime contentModified = System.IO.File.GetLastWriteTime(HttpContext.Current.Server.MapPath(imgFilePath));

if (IsClientCached(contentModified))

{

HttpContext.Current.Response.StatusCode = 304;

HttpContext.Current.Response.SuppressContent = true;

}

else

{

byte[] mydata = new byte[fs.Length];

int Length = Convert.ToInt32(fs.Length);

fs.Read(mydata, 0, Length);

fs.Close();

HttpContext.Current.Response.OutputStream.Write(mydata, 0, Length);

HttpContext.Current.Response.ContentType = "image/jpeg";

HttpContext.Current.Response.End();

HttpContext.Current.Response.Cache.SetETagFromFileDependencies();

HttpContext.Current.Response.Cache.SetAllowResponseInBrowserHistory(true);

HttpContext.Current.Response.Cache.SetLastModified(contentModified);

}

}

复制代码 代码如下:

//outpuimg.ashx?src=/images/weimeidesc/8af30049-797e-4eb4-8a54-cc4de47c1694.jpg!100x100.jpg

public void ProcessRequest(HttpContext context)

{

//获取图片

string imgUrl = context.Request.QueryString["src"];

string trueFilePath = imgUrl.Split('!')[0];

//获取图片大小

int width = Convert.ToInt32(imgUrl.Split('!')[1].Replace(".jpg", "").Split('x')[0]);

int height = Convert.ToInt32(imgUrl.Split('!')[1].Replace(".jpg", "").Split('x')[1]);

//图片已经存在直接输出

if (File.Exists(context.Server.MapPath("~/" + imgUrl)))

{

OutPutImg("~/"+imgUrl);

}

else

{

if (!string.IsNullOrEmpty(imgUrl) && File.Exists(context.Server.MapPath("~/" + trueFilePath)))

{

Image originalImage = System.Drawing.Image.FromFile(context.Server.MapPath("~/" + trueFilePath));

var newBitmap = new Bitmap(originalImage);

//生成相应的小图并保存

SendSmallImage(context.Server.MapPath("~/" + trueFilePath),context.Server.MapPath("~/" + imgUrl), width, height, "meiyouyisi");

//输出

OutPutImg("~/" + imgUrl);

}

else//图片如果不存在 输出默认图片

{

//OutPutImg(imgUrl);

}

}

}

【asp.net生成缩略图示例方法分享】相关文章:

asp.net中List的使用方法

C# 生成高质量缩略图程序—终极算法

asp.net模板引擎Razor调用外部方法用法实例

.net的socket异步通讯示例分享

asp.net清空Cookie的两种方法

ASP.net 生成缩略图的实例源代码

asp.net创建位图生成验证图片类

asp.net操作xml增删改示例分享

Asp.net使用Comet开发http长连接示例分享

asp.net验证码图片生成示例

精品推荐
分类导航