【发布时间】:2013-12-19 19:55:13
【问题描述】:
我正在使用ImageHandler.ashx 调整网站上的图像大小,它会即时调整图像大小。但质量下降。
如何改进此代码以提高图像质量。带有此代码的图像略微像素化。
我使用以下代码行显示图像
imgBanner.ImageUrl = "../ImageHandler.ashx?h=108&w=162&file=../images/ImageName.jpg
以下是处理程序的代码
<%@ WebHandler Language="C#" Class="ImageHandler" %>
using System;
using System.Web;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
public class ImageHandler : IHttpHandler {
public void ProcessRequest(HttpContext context)
{
// for new height of image
int h = int.Parse(context.Request.QueryString["h"].ToString());
// for new width of image
int w = int.Parse(context.Request.QueryString["w"].ToString());
// for image file name
string file = context.Request.QueryString["file"].ToString();
// Path of image folder where images files are placed
string filePath = context.Server.MapPath("~/images/" + file);
// Resize proccess
using (System.Drawing.Image img = System.Drawing.Image.FromFile(filePath))
{
Bitmap objBmp = new Bitmap(img, w, h);
string extension = Path.GetExtension(filePath);
MemoryStream ms;
byte[] bmpBytes;
switch (extension.ToLower())
{
case ".jpg":
case ".jpeg":
ms = new MemoryStream();
objBmp.Save(ms, ImageFormat.Jpeg);
bmpBytes = ms.GetBuffer();
context.Response.ContentType = "image/jpeg";
context.Response.BinaryWrite(bmpBytes);
objBmp.Dispose();
ms.Close();
context.Response.End();
break;
case ".png":
ms = new MemoryStream();
objBmp.Save(ms, ImageFormat.Png);
bmpBytes = ms.GetBuffer();
context.Response.ContentType = "image/png";
context.Response.BinaryWrite(bmpBytes);
objBmp.Dispose();
ms.Close();
context.Response.End();
break;
case ".gif":
ms = new MemoryStream();
objBmp.Save(ms, ImageFormat.Gif);
bmpBytes = ms.GetBuffer();
context.Response.ContentType = "image/png";
context.Response.BinaryWrite(bmpBytes);
objBmp.Dispose();
ms.Close();
context.Response.End();
break;
}
img.Dispose();
}
}
public bool IsReusable {
get {
return false;
}
}
}
【问题讨论】:
-
您不能只是调整大小并期望您的图像质量不会降低。请查看此线程以获取一些建议stackoverflow.com/questions/11137979/…
-
他们是否有可能改进此代码...但增加质量价值...
标签: c# asp.net image-resizing