14

画像の種類 (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 画像をプロポーショナルにサイズ変更するにはどうすればよいですか?

このメソッドを使用することは知っていますが、これをどこに置くべきかわかりません (!)。

4

2 に答える 2

16

何よりもまず、画像の現在の高さと幅を取得していません。比例してサイズを変更するには、画像の現在の高さ/幅を取得し、それに基づいてサイズを変更する必要があります。

そこから、最大の属性を見つけ、それに基づいて比例してサイズを変更します。

たとえば、現在の画像が 800 x 600 で、400 x 400 のスペース内で比例してサイズを変更したいとします。最大の比率 (800) をつかみ、新しいサイズに対する比率を見つけます。800 -> 400 = .5 次に、その比率を取り、2 番目の次元を掛けます (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;
}
于 2009-04-01T02:53:01.337 に答える
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;
    }
}
于 2009-04-01T02:54:50.660 に答える