0

我正在使用 asp.net mvc 3 流式传输调整大小的图像。但是即使我将平滑模式和插值模式设置为 highbiqubic,图像的输出也是灰色和模糊的。

public ActionResult ImageTEST(int fileID, int width, int height)
{
    var file = _fileRep.GetFile(fileID);
    byte[] newFile;

    float ratioX = (float)width / (float)file.Width;
    float ratioY = (float)height / (float)file.Height;
    float ratio = Math.Min(ratioX, ratioY);

    int newWidth = (int)(file.Width * ratio);
    int newHeight = (int)(file.Height * ratio);

    using (var resizedImage = new Bitmap(newWidth, newHeight))
    {
        using (var source = new Bitmap(new MemoryStream(file.FileContent)))
        {
            using (var g = Graphics.FromImage(resizedImage))
            {
                g.SmoothingMode = SmoothingMode.HighQuality;
                g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                g.DrawImage(source, 0, 0, newWidth, newHeight);
            }
        }

        using (var ms = new MemoryStream())
        {
            resizedImage.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

            newFile = ms.ToArray();
        }
    }

    return new FileContentResult(newFile, "image/jpeg");
}

结果:

在此处输入图像描述

右边是完全相同的图片,但在 Photoshop 中调整了大小。

我该如何调整它以使质量更好?

4

1 回答 1

1

首先,尝试以更高的质量保存。

EncoderParameters ep = new EncoderParameters(); 
ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)100); 
foo.Save(filename, ici, ep);

如果这不能满足,您可能需要使用其他库,例如 Emgu cv。

灰色问题可能是因为原始图像的颜色空间(AdobeRGB 或 sRGB)与您保存的颜色空间不同。

于 2013-05-28T10:06:40.323 回答