在asp.net图像处理程序中缩小图像质量并不好

时间:2014-03-05 04:19:30

标签: c# asp.net image-processing

我上传大图片让我们说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上解决了这个问题

enter image description here

更新

我使用以下代码行

修复了图像中的错误显示
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 100L);

0 个答案:

没有答案