httphandler生成的png未在旧浏览器(IE8)中显示

本文关键字:浏览器 IE8 显示 png httphandler | 更新日期: 2023-09-27 18:00:05

我制作了一个httphandler,它可以收缩图像并将其返回为PNG。这在我的带有IE 9的Vista PC上运行良好,但在一些带有IE 8的旧XP机器上则不然。这似乎很奇怪,这应该是一个浏览器问题,但对我来说,它看起来是这样的。但是,我在想,既然我在服务器上生成PNG,我一定在代码中做了一些错误的事情。

httphandler(简化):

<%@ WebHandler Language="C#" Class="ShowPicture" %>
using System.Data;
using System;
using System.IO;
using System.Web;
public class ShowPicture : IHttpHandler {
public void ProcessRequest (HttpContext context) {
    context.Response.ContentType = "image/png";
    // byteArray comes from database
    // maxWidth and maxHeight comes from Request
    context.Response.BinaryWrite(
        Common.ResizeImageFromArray(byteArray, maxWidth, maxHeight));
}

这个函数被称为(也被简化了):

public static byte[] ResizeImageFromArray(byte[] array, int maxWidth, int maxHeight)
{
    byte[] picArray = array;
    if (maxWidth > 0 || maxHeight > 0)  // Resize the image
    {
        Bitmap dbbmp = (Bitmap)Bitmap.FromStream(new MemoryStream(array));
        if (dbbmp.Width > maxWidth || dbbmp.Height > maxHeight)
        {
            // Calculate the max width/height factor
            Bitmap resized = new Bitmap(dbbmp, newWidth, newHeight);
            MemoryStream ms = new MemoryStream();
            resized.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
            picArray = new Byte[ms.Length - 1];
            ms.Position = 0;
            ms.Read(picArray, 0, picArray.Length);
            ms.Close();
        }
    }
    return picArray;
}

我感谢任何想法和/或意见。提前谢谢。

httphandler生成的png未在旧浏览器(IE8)中显示

使用不同格式调整大小:

Bitmap resizedBitmap = new Bitmap(newWidth, newHeight, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(resizedBitmap);
g.DrawImage(originalBitmap, new Rectangle(Point.Empty, resizedBitmap.Size), new Rectangle(Point.Empty, originalBitmap.Size), GraphicsUnit.Pixel);
g.Dispose();

有了它,您将拥有一个按比例缩放的位图,还可以使用图形对象选项来获得更好的质量/更快的处理时间。

此外,要将MemoryStream转换为数组,最好使用ms.ToArray();

picArray = ms.ToArray();

这样就不需要自己创建数组了。