图像调整大小会产生具有原始尺寸的图像

时间:2015-12-27 15:48:37

标签: c# asp.net image

我正在尝试调整图片大小。此代码生成具有原始尺寸的图像(不执行调整大小)。

Image original = Image.FromFile(Server.MapPath("~/SavedFiles/Audios/") + fileNameF);
Image resized = ResizeImage(original, new Size(200, 200));
MemoryStream memStream = new MemoryStream();
resized.Save(memStream, ImageFormat.Jpeg);

点击按钮,我正在调用此代码:

public static Image ResizeImage(Image image, Size size, bool preserveAspectRatio = true)
{
    int newWidth;
    int newHeight;

    if (preserveAspectRatio)
    {
        int originalWidth = image.Width;
        int originalHeight = image.Height;
        float percentWidth = (float)size.Width / (float)originalWidth;
        float percentHeight = (float)size.Height / (float)originalHeight;
        float percent = percentHeight < percentWidth ? percentHeight : percentWidth;

        newWidth = (int)(originalWidth * percent);
        newHeight = (int)(originalHeight * percent);
    }
    else
    {
        newWidth = size.Width;
        newHeight = size.Height;
    }

    Image newImage = new Bitmap(newWidth, newHeight);

    using (Graphics graphicsHandle = Graphics.FromImage(image))
    {
        graphicsHandle.InterpolationMode = InterpolationMode.HighQualityBicubic;
        graphicsHandle.DrawImage(newImage, 0, 0, newWidth, newHeight);
    }

    return newImage;
}

1 个答案:

答案 0 :(得分:2)

这是我根据你的代码做的方式,我测试的是在文件中使用我的图像并在指定的文件夹中找到它。它工作正常。您的代码只有小问题(请参阅我对Stream的评论,尤其是newImage声明中的评论):

    private void button1_Click(object sender, EventArgs e) {
        Image original = Image.FromFile(Application.StartupPath + "\\ChessSet_Orig.JPG");
        Image resized = ResizeImage(original, new Size(200, 200));          
        FileStream fileStream = new FileStream(Application.StartupPath + "\\ChessSet_resized.JPG", FileMode.Create); //I use file stream instead of Memory stream here
        resized.Save(fileStream, ImageFormat.Jpeg);
        fileStream.Close(); //close after use
    }

    public static Image ResizeImage(Image image, Size size, bool preserveAspectRatio = true) {
        int newWidth;
        int newHeight;
        if (preserveAspectRatio) {
            int originalWidth = image.Width;
            int originalHeight = image.Height;
            float percentWidth = (float)size.Width / (float)originalWidth;
            float percentHeight = (float)size.Height / (float)originalHeight;
            float percent = percentHeight < percentWidth ? percentHeight : percentWidth;
            newWidth = (int)(originalWidth * percent);
            newHeight = (int)(originalHeight * percent);
        } else {
            newWidth = size.Width;
            newHeight = size.Height;
        }
        Image newImage = new System.Drawing.Bitmap(image, newWidth, newHeight); // I specify the new image from the original together with the new width and height
        using (Graphics graphicsHandle = Graphics.FromImage(image)) {
            graphicsHandle.InterpolationMode = InterpolationMode.HighQualityBicubic;
            graphicsHandle.DrawImage(newImage, 0, 0, newWidth, newHeight);
        }
        return newImage;
    }

结果如下,

enter image description here

原始图像尺寸为820 x 760

enter image description here