当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何按比例调整.NET中任何类型的图像大小?》经验,为你挑选了2个好方法。

是否可以以独立于图像类型(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图像的比例?

我知道使用这种方法,但不知道放在哪里(!).



1> jerebear..:

首先,您并没有抓住图像的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;
}



2> BFree..:

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

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;
    }
}


调用者可能非常相关地知道他们想要图像的确切尺寸...例如,如果我有一个1024X768的图像并且我希望它缩小到50X50的缩略图,我不应该有计算百分比.就个人而言,我会标准化宽度/高度并提供最终调用宽度/高度版本的百分比重载.最好的两个,而不是很多额外的代码.
推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有