为什么Image.GetThumbnailImage在IIS6和IIS7.5上的工作方式不同?

时间:2013-01-10 15:17:33

标签: asp.net .net vb.net iis-6 iis-7.5

有点奇怪的问题,我不知道是否有人会遇到过这个问题。

我们有一个ASP.net页面,在文件系统上生成物理缩略图jpeg文件,并将fullsize图像复制到其他位置。因此,我们输入一个图像,我们在一个位置获得一个完整的副本,在另一个位置获得一个102 * 68的小图像。

我们目前正在寻求最终从Server 2003上的IIS6迁移到Server 2008R2上的IIS7.5,除非出现问题。

在旧系统上(因此IIS6 / Server 2003),黑色边框被移除,图像保持正确的比例。在新系统(IIS7.5 / Server 2008)上,缩略图的呈现方式与JPEG中的缩略图完全一样,带有黑色边框,但这会使缩略图略微压扁,显然包含丑陋的黑色边框。

任何人都知道为什么会发生这种情况?我做了谷歌,似乎无法找出哪种行为是“正确的”。我的直觉告诉我,新系统正确渲染缩略图,但我不知道。

任何人都有任何建议如何解决问题?

1 个答案:

答案 0 :(得分:0)

我认为正如所建议的那样.net差异。不是IIS。

重新编写代码,节省大量时间,非常简单。

这是我刚才写的一个图像处理程序,它会将任何图像绘制到您的设置中。

public class image_handler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
    // set file
    string ImageToDraw = context.Request.QueryString["FilePath"];
    ImageToDraw = context.Server.MapPath(ImageToDraw);


    // Grab images to work on's true width and height
    Image ImageFromFile = Image.FromFile(ImageToDraw);
    double ImageFromFileWidth = ImageFromFile.Width;
    double ImageFromFileHeight = ImageFromFile.Height;
    ImageFromFile.Dispose();

    // Get required width and work out new dimensions
    double NewHeightRequired = 230;

    if (context.Request.QueryString["imageHeight"] != null)
        NewHeightRequired = Convert.ToDouble(context.Request.QueryString["imageHeight"]);

    double DivTotal = (ImageFromFileHeight / NewHeightRequired);
    double NewWidthValue = (ImageFromFileWidth / DivTotal);
    double NewHeightVale = (ImageFromFileHeight / DivTotal);

    NewWidthValue = ImageFromFileWidth / (ImageFromFileWidth / NewWidthValue);
    NewHeightVale = ImageFromFileHeight / (ImageFromFileHeight / NewHeightVale);


    // Set new width, height
    int x = Convert.ToInt16(NewWidthValue);
    int y = Convert.ToInt16(NewHeightVale);

    Bitmap image = new Bitmap(x, y);
    Graphics g = Graphics.FromImage(image);
    Image thumbnail = Image.FromFile(ImageToDraw);

    // Quality Control
    g.InterpolationMode = InterpolationMode.HighQualityBicubic;
    g.SmoothingMode = SmoothingMode.HighQuality;
    g.PixelOffsetMode = PixelOffsetMode.HighQuality;
    g.CompositingQuality = CompositingQuality.HighQuality;
    g.DrawImage(thumbnail, 0, 0, x, y);
    g.Dispose();

    image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
    image.Dispose();
}

public bool IsReusable
{
    get
    {
        return true;
    }
}