Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 缩小asp.net图像处理程序中的图像质量不好_C#_Asp.net_Image Processing - Fatal编程技术网

C# 缩小asp.net图像处理程序中的图像质量不好

C# 缩小asp.net图像处理程序中的图像质量不好,c#,asp.net,image-processing,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.

我上传大图像,比如说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;
        }
    }

}
然后生成以下错误

我使用以下代码将图像绑定到图像控件

  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);

我听说这件事很好。也许一个
img{-ms interpolation mode:bicubic;}
的css就可以修复IE了。我过去也尝试过css技巧,但没什么不同。。。可能是我做错了什么检查一下这个答案中的代码,它设置了转换的插值模式,这在调整大小时会产生更好的质量。
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 100L);