如何按比例调整.NET中任何类型的图像大小?

时间:2009-04-01 02:48:19

标签: c# .net graphics image-manipulation

是否可以按照与图像类型无关的方式按比例调整图像大小(bmp,jpg,png等)?

我有这段代码并知道缺少某些东西(但不知道是什么):

public bool ResizeImage(string fileName, string imgFileName,
    ImageFormat format, int width, int height)
{
    try
    {
        using (Image img = Image.FromFile(fileName))
        {
            Image thumbNail = new Bitmap(width, height, img.PixelFormat);
            Graphics g = Graphics.FromImage(thumbNail);
            g.CompositingQuality = CompositingQuality.HighQuality;
            g.SmoothingMode = SmoothingMode.HighQuality;
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            Rectangle rect = new Rectangle(0, 0, width, height);
            g.DrawImage(img, rect);
            thumbNail.Save(imgFileName, format);
        }
        return true;
    }
    catch (Exception)
    {
        return false;
    }
}

如果不可能,我如何调整jpeg图像的比例?

我知道使用this method,但不知道放哪个(!)。

2 个答案:

答案 0 :(得分:16)

首先,你并没有抓住图像的CURRENT高度和宽度。为了按比例调整大小,您需要获取图像的当前高度/宽度并根据该值调整大小。

从那里,找到最大的属性并根据它按比例调整大小。

例如,假设当前图像为800 x 600,您需要在400 x 400空间内按比例调整大小。抓住最大比例(800)并找到它与新尺寸的比率。 800 - > 400 = .5现在取该比率并乘以第二维(600 * .5 = 300)。

您的新尺寸为400 x 300。 这是一个PHP示例(抱歉......你会得到它)

$thumb_width = 400;
$thumb_height = 400;

$orig_w=imagesx($src_img); 
$orig_h=imagesy($src_img);      

if ($orig_w>$orig_h){//find the greater proportion
    $ratio=$thumb_width/$orig_w; 
    $thumb_height=$orig_h*$ratio;
}else{
    $ratio=$thumb_height/$orig_h; 
    $thumb_width=$orig_w*$ratio;
}

答案 1 :(得分:9)

我认为你的代码很好,但是考虑到参数的宽度和高度是我认为你出错的地方。为什么这种方法的调用者必须决定他们想要的宽度和高度有多大?我建议将其改为百分比:

public bool ResizeImage(string fileName, string imgFileName,
    ImageFormat format, int percent)
{
    try
    {
        using (Image img = Image.FromFile(fileName))
        {
            int width = img.Width * (percent * .01);
            int height = img.Height * (percent * .01);
            Image thumbNail = new Bitmap(width, height, img.PixelFormat);
            Graphics g = Graphics.FromImage(thumbNail);
            g.CompositingQuality = CompositingQuality.HighQuality;
            g.SmoothingMode = SmoothingMode.HighQuality;
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
            Rectangle rect = new Rectangle(0, 0, width, height);
            g.DrawImage(img, rect);
            thumbNail.Save(imgFileName, format);
        }
        return true;
    }
    catch (Exception)
    {
        return false;
    }
}