我上传大图片让我们说600x400,然后使用图像处理程序将其缩小到200x133。
但是用图像处理程序处理图像后图像的质量不好。
我使用ImageHandler.ashx
以下是IMAGE-HANDLER的代码
<%@ 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();
//System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
//EncoderParameters myEncoderParameters = new EncoderParameters(1);
//myEncoderParameter = new EncoderParameter(myEncoder, 100L);
//myEncoderParameters.Param[0] = myEncoderParameter;
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;
}
}
}
使用此代码,我无法获得高质量的图像。 以及在代码
之后取消评论时 //System.Drawing.Imaging.Encoder myEncoder = System.Drawing.Imaging.Encoder.Quality;
//EncoderParameters myEncoderParameters = new EncoderParameters(1);
//myEncoderParameter = new EncoderParameter(myEncoder, 100L);
//myEncoderParameters.Param[0] = myEncoderParameter;
然后生成以下错误。
我使用以下代码将图像绑定到图像控件。
imgNews.ImageUrl = "../ImageHandler.ashx?h=200&w=133&file=../images/" + ImageName;
请告知我如何提高图像质量。对于某些图像,此代码可能工作正常,但大多数缩小尺寸的图像质量不高。
如果我不使用图像处理程序并且只指定图像的宽度,那么图像在FF,Chrome,Safar中看起来非常好但不在IE 8,9和10中作为IE用来缩小图像的算法不好(这个是我在互联网上的红色很多)我希望他们已经在IE11上解决了这个问题
更新
我使用以下代码行
修复了图像中的错误显示EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 100L);