画像C#のサイズを変更する方法


288

そしてあるの性質; C#で実行時にImageオブジェクトのサイズを変更するにはどうすればよいですか?SizeWidthHeightGet()System.Drawing.Image

現在、私は新しいImageを使用して作成しています:

// objImage is the original Image
Bitmap objBitmap = new Bitmap(objImage, new Size(227, 171));

2
正しい方法ではありません...低品質の補間を使用し、新しいビットマップ画像の期間中、元のストリームがロックされたままになる可能性があります... 独自の画像サイズ変更ソリューションを実行する前に、画像サイズ変更の落とし穴リストをお読みください。
リリス川

2
捨てて!Using(){}が機能します!
Scott Coates

8
これらの回答が役立つ場合は、受け入れられた回答にマークを付けることを検討してください。
ジョエル2014年

3
追加のライブラリを使用する必要はありません。Markが以下に投稿したコードは完全に機能します。
Elmue 2014

9
マークとは?私は彼の答えを見つけることができませんでしたが、それについて言及しているコメントが3つあります。
Sinatr

回答:


490

これにより、高品質のサイズ変更が実行されます。

/// <summary>
/// Resize the image to the specified width and height.
/// </summary>
/// <param name="image">The image to resize.</param>
/// <param name="width">The width to resize to.</param>
/// <param name="height">The height to resize to.</param>
/// <returns>The resized image.</returns>
public static Bitmap ResizeImage(Image image, int width, int height)
{
    var destRect = new Rectangle(0, 0, width, height);
    var destImage = new Bitmap(width, height);

    destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);

    using (var graphics = Graphics.FromImage(destImage))
    {
        graphics.CompositingMode = CompositingMode.SourceCopy;
        graphics.CompositingQuality = CompositingQuality.HighQuality;
        graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
        graphics.SmoothingMode = SmoothingMode.HighQuality;
        graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;

        using (var wrapMode = new ImageAttributes())
        {
            wrapMode.SetWrapMode(WrapMode.TileFlipXY);
            graphics.DrawImage(image, destRect, 0, 0, image.Width,image.Height, GraphicsUnit.Pixel, wrapMode);
        }
    }

    return destImage;
}
  • wrapMode.SetWrapMode(WrapMode.TileFlipXY) 画像の境界の周りのゴーストを防ぎます-ナイーブなサイズ変更は画像の境界を越えて透明なピクセルをサンプリングしますが、画像をミラーリングすることでより良いサンプルを得ることができます(この設定は非常に目立ちます)
  • destImage.SetResolution 物理的なサイズに関係なくDPIを維持します-画像のサイズを縮小するとき、または印刷するときに品質を向上させることができます
  • 合成は、ピクセルと背景のブレンド方法を制御します。描画するのは1つだけなので、必要ない場合もあります。
    • graphics.CompositingModeソース画像のピクセルを上書きするか、背景ピクセルと組み合わせるかを決定します。SourceCopy色がレンダリングされるときに、背景色を上書きすることを指定します。
    • graphics.CompositingQuality レイヤー化された画像のレンダリング品質レベルを決定します。
  • graphics.InterpolationMode 2つのエンドポイント間の中間値の計算方法を決定します
  • graphics.SmoothingMode 線、曲線、塗りつぶされた領域のエッジがスムージング(アンチエイリアスとも呼ばれます)を使用するかどうかを指定します-おそらくベクトルでのみ機能します
  • graphics.PixelOffsetMode 新しい画像を描画するときのレンダリング品質に影響します

アスペクト比を維持することは、読者のための練習問題として残されています(実際、私はあなたのためにそれを行うのがこの関数の仕事だとは思いません)。

また、これは画像のサイズ変更に伴ういくつかの落とし穴を説明する優れた記事です。上記の関数はそれらのほとんどをカバーしますが、それでも保存について心配する必要があります。


4
コードは画像のサイズを変更するときに完全に機能しましたが、サイズが66KBから132KBに増加しました。Hoe can I reduce it
chamara 2014年

3
@chamaraそれはおそらくあなたが選択した保存品質によるものです。msdn.microsoft.com/en-us/library/bb882583(v=vs.110).aspxを参照してください quality = 90を試してください
mpen 2014年

3
@kstubs確かに。Bitmap基本的にはクラスの名前だけなので、好きなファイルタイプとして保存できます。
mpen

5
おそらくへの参照を追加する必要が@dotNetBlackBelt System.Drawingと追加using System.Drawing.Imaging;
MPEN

2
これは元のアスペクト比を維持しませんか?
Kasper Skov

148

これについて何がそれほど難しいかわからない、あなたがやっていたことをやって、オーバーロードされたビットマップコンストラクタを使用してサイズ変更された画像を作成してください、あなたが欠けていた唯一のものは画像データ型へのキャストバックでした:

    public static Image resizeImage(Image imgToResize, Size size)
    {
       return (Image)(new Bitmap(imgToResize, size));
    }

    yourImage = resizeImage(yourImage, new Size(50,50));

2
yourImage新しい画像に割り当てる前に、破棄すべきではありませんか?
Nick Shaw

3
手動で破棄するか、ガベージコレクターに処理を任せることができます。どんなに。
Elmue 2014

23
このコードでは、非常に重要なサイズ変更の品質を制御できません。マークからの答えを見てください。
Elmue 2014

42

、この質問、あなたは私を含め、いくつかの答えを持っています:

public Image resizeImage(int newWidth, int newHeight, string stPhotoPath)
 {
     Image imgPhoto = Image.FromFile(stPhotoPath); 

     int sourceWidth = imgPhoto.Width;
     int sourceHeight = imgPhoto.Height;

     //Consider vertical pics
    if (sourceWidth < sourceHeight)
    {
        int buff = newWidth;

        newWidth = newHeight;
        newHeight = buff;
    }

    int sourceX = 0, sourceY = 0, destX = 0, destY = 0;
    float nPercent = 0, nPercentW = 0, nPercentH = 0;

    nPercentW = ((float)newWidth / (float)sourceWidth);
    nPercentH = ((float)newHeight / (float)sourceHeight);
    if (nPercentH < nPercentW)
    {
        nPercent = nPercentH;
        destX = System.Convert.ToInt16((newWidth -
                  (sourceWidth * nPercent)) / 2);
    }
    else
    {
        nPercent = nPercentW;
        destY = System.Convert.ToInt16((newHeight -
                  (sourceHeight * nPercent)) / 2);
    }

    int destWidth = (int)(sourceWidth * nPercent);
    int destHeight = (int)(sourceHeight * nPercent);


    Bitmap bmPhoto = new Bitmap(newWidth, newHeight,
                  PixelFormat.Format24bppRgb);

    bmPhoto.SetResolution(imgPhoto.HorizontalResolution,
                 imgPhoto.VerticalResolution);

    Graphics grPhoto = Graphics.FromImage(bmPhoto);
    grPhoto.Clear(Color.Black);
    grPhoto.InterpolationMode =
        System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

    grPhoto.DrawImage(imgPhoto,
        new Rectangle(destX, destY, destWidth, destHeight),
        new Rectangle(sourceX, sourceY, sourceWidth, sourceHeight),
        GraphicsUnit.Pixel);

    grPhoto.Dispose();
    imgPhoto.Dispose();
    return bmPhoto;
}

5
imgPhoto.Dispose();を忘れました。ファイルは
引き続き

1
これは非常に便利です。アプリで使用しています。ただし、このアルゴリズムは透明なイメージでは機能しないことに注意することが重要です。すべての透明なピクセルが黒に変わります。おそらく修正は簡単ですが、ユーザーへのメモにすぎません。:)
ミーム2016年

1
画像を保存しませんか?imgPhoto.Save()?
むち打ち症2016年

@meme透明なドキュメントの黒い背景を修正する方法についてのリンクを教えてください。
Syed Mohamed 2017

25

System.Drawing.Image.GetThumbnailImageメソッドを使用しないのはなぜですか?

public Image GetThumbnailImage(
    int thumbWidth, 
    int thumbHeight, 
    Image.GetThumbnailImageAbort callback, 
    IntPtr callbackData)

例:

Image originalImage = System.Drawing.Image.FromStream(inputStream, true, true);
Image resizedImage = originalImage.GetThumbnailImage(newWidth, (newWidth * originalImage.Height) / originalWidth, null, IntPtr.Zero);
resizedImage.Save(imagePath, ImageFormat.Png);

ソース:http : //msdn.microsoft.com/en-us/library/system.drawing.image.getthumbnailimage.aspx


6
これは、画像のサイズを変更する正しい方法ではありません。存在する場合は、jpgからサムネイルを取得します。存在しない場合は、品質や新しい画像を制御できません。また、このコードにはメモリリークがあります。
Robert Smith 14年

1
@Bobrotなぜこれがメモリリークを引き起こすのですか?
ユーザー

2
GDIライブラリ内のすべてが管理されていないまま実行されています。usingステートメントを使用したり、後でオブジェクトを破棄したりしないと、システムがこれらのオブジェクトのガベージコレクションを実行してメモリを再び利用できるようになるまでに長い時間がかかる場合があります。
Robert Smith 14

9
それはあなたが言うとおりです:それは長い時間がかかるかもしれません。しかし、これはメモリリークではありません。メモリが解放されない場合は、メモリリークになる可能性があります。しかし、これはガベージコレクタの通常の動作であり、CPUがアイドル状態のときにメモリを解放します。using()ステートメントはメモリリークを防ぎません。ガベージコレクタがメモリを解放する間、メモリをすぐに解放します。これがこの特定のケースの唯一の違いです。
Elmue 2014

画像のサイズ変更の落とし穴を参照してください:nathanaeljones.com/blog/2009/20-image-resizing-pitfalls "GetThumbnailImage()の使用。GetThumbnailImage()は明白な選択のように思われ、多くの記事ではその使用を推奨しています。残念ながら、常に埋め込まれたjpegを取得しています。サムネイルが存在する場合。これらの写真がある場合とない場合-通常はカメラによって異なります。一部の写真ではGetThumbnailImageが適切に機能するのに、他の写真ではひどくぼやける理由が不思議に思われます。GetThumbnailImage()は、大きな写真では信頼できません。そのため、10px x 10pxよりも大きい。」
Nick Painter

12

あなたは試みることができるネット-VIPを C#でのバインディング、libvips。これは、遅延した、デマンド駆動型の画像処理ライブラリーであるため、画像全体をロードする必要なく、このような操作を実行できます。

たとえば、便利な画像サムネイル機能が付属しています。

Image image = Image.Thumbnail("image.jpg", 300, 300);
image.WriteToFile("my-thumbnail.jpg");

また、画像の最も重要な部分をインテリジェントに判断し、画像のトリミング中にフォーカスを維持する方法であるスマートクロップもサポートしています。例えば:

Image image = Image.Thumbnail("owl.jpg", 128, crop: "attention");
image.WriteToFile("tn_owl.jpg");

owl.jpgオフセンター構成はどこにありますか:

フクロウ

この結果を与えます:

フクロウスマートクロップ

最初に画像を縮小して縦軸を128ピクセルにし、次にこのattention戦略を使用して横方向に128ピクセルにトリミングします。これは、人間の目を引くかもしれない特徴を画像で検索しますSmartcrop()。詳細については、を参照してください。


libvipsへのバインドは素晴らしいようです。私は間違いなくあなたのlibを見ていきます。これをC#開発者が利用できるようにしていただきありがとうございます。
FrenchTastic

これは素晴らしいです!画像処理ライブラリがこれほどよく見えるとは思いもしませんでした。
dalvir

いいね!ImageMagickより重い
Moshe L

10

この意志 -

  • ループを必要とせずに幅と高さのサイズを変更
  • 画像の元のサイズを超えない

//////////////

private void ResizeImage(Image img, double maxWidth, double maxHeight)
{
    double resizeWidth = img.Source.Width;
    double resizeHeight = img.Source.Height;

    double aspect = resizeWidth / resizeHeight;

    if (resizeWidth > maxWidth)
    {
        resizeWidth = maxWidth;
        resizeHeight = resizeWidth / aspect;
    }
    if (resizeHeight > maxHeight)
    {
        aspect = resizeWidth / resizeHeight;
        resizeHeight = maxHeight;
        resizeWidth = resizeHeight * aspect;
    }

    img.Width = resizeWidth;
    img.Height = resizeHeight;
}

11
OPはSystem.Drawing.Imageについて尋ねていましたが、 'Width'プロパティと 'Height'プロパティは設定できないため、コードは機能しません。ただし、System.Windows.Controls.Imageでは機能します。
mmmdreg 2013

10
public static Image resizeImage(Image image, int new_height, int new_width)
{
    Bitmap new_image = new Bitmap(new_width, new_height);
    Graphics g = Graphics.FromImage((Image)new_image );
    g.InterpolationMode = InterpolationMode.High;
    g.DrawImage(image, 0, 0, new_width, new_height);
    return new_image;
}

グラフィックを破棄するのを忘れました。補間モードが改善れた新しいビットマップ(イメージ、幅、高さ)と同じ原理のようです。デフォルトとは何ですか?それよりも悪いLowですか?
Sinatr

9

このコードは上記の回答の1つから投稿されたものと同じですが、透明ピクセルを黒ではなく白に変換します...ありがとう:)

    public Image resizeImage(int newWidth, int newHeight, string stPhotoPath)
    {
        Image imgPhoto = Image.FromFile(stPhotoPath);

        int sourceWidth = imgPhoto.Width;
        int sourceHeight = imgPhoto.Height;

        //Consider vertical pics
        if (sourceWidth < sourceHeight)
        {
            int buff = newWidth;

            newWidth = newHeight;
            newHeight = buff;
        }

        int sourceX = 0, sourceY = 0, destX = 0, destY = 0;
        float nPercent = 0, nPercentW = 0, nPercentH = 0;

        nPercentW = ((float)newWidth / (float)sourceWidth);
        nPercentH = ((float)newHeight / (float)sourceHeight);
        if (nPercentH < nPercentW)
        {
            nPercent = nPercentH;
            destX = System.Convert.ToInt16((newWidth -
                      (sourceWidth * nPercent)) / 2);
        }
        else
        {
            nPercent = nPercentW;
            destY = System.Convert.ToInt16((newHeight -
                      (sourceHeight * nPercent)) / 2);
        }

        int destWidth = (int)(sourceWidth * nPercent);
        int destHeight = (int)(sourceHeight * nPercent);


        Bitmap bmPhoto = new Bitmap(newWidth, newHeight,
                      PixelFormat.Format24bppRgb);

        bmPhoto.SetResolution(imgPhoto.HorizontalResolution,
                     imgPhoto.VerticalResolution);

        Graphics grPhoto = Graphics.FromImage(bmPhoto);
        grPhoto.Clear(Color.White);
        grPhoto.InterpolationMode =
            System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

        grPhoto.DrawImage(imgPhoto,
            new Rectangle(destX, destY, destWidth, destHeight),
            new Rectangle(sourceX, sourceY, sourceWidth, sourceHeight),
            GraphicsUnit.Pixel);

        grPhoto.Dispose();
        imgPhoto.Dispose();

        return bmPhoto;
    }

7

このアプリケーションでは、複数のオプションを持つ関数を作成する必要がありました。かなり大きいですが、画像のサイズを変更し、アスペクト比を維持し、エッジをカットして画像の中心のみを返すことができます。

/// <summary>
    /// Resize image with a directory as source
    /// </summary>
    /// <param name="OriginalFileLocation">Image location</param>
    /// <param name="heigth">new height</param>
    /// <param name="width">new width</param>
    /// <param name="keepAspectRatio">keep the aspect ratio</param>
    /// <param name="getCenter">return the center bit of the image</param>
    /// <returns>image with new dimentions</returns>
    public Image resizeImageFromFile(String OriginalFileLocation, int heigth, int width, Boolean keepAspectRatio, Boolean getCenter)
    {
        int newheigth = heigth;
        System.Drawing.Image FullsizeImage = System.Drawing.Image.FromFile(OriginalFileLocation);

        // Prevent using images internal thumbnail
        FullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
        FullsizeImage.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);

        if (keepAspectRatio || getCenter)
        {
            int bmpY = 0;
            double resize = (double)FullsizeImage.Width / (double)width;//get the resize vector
            if (getCenter)
            {
                bmpY = (int)((FullsizeImage.Height - (heigth * resize)) / 2);// gives the Y value of the part that will be cut off, to show only the part in the center
                Rectangle section = new Rectangle(new Point(0, bmpY), new Size(FullsizeImage.Width, (int)(heigth * resize)));// create the section to cut of the original image
                //System.Console.WriteLine("the section that will be cut off: " + section.Size.ToString() + " the Y value is minimized by: " + bmpY);
                Bitmap orImg = new Bitmap((Bitmap)FullsizeImage);//for the correct effect convert image to bitmap.
                FullsizeImage.Dispose();//clear the original image
                using (Bitmap tempImg = new Bitmap(section.Width, section.Height))
                {
                    Graphics cutImg = Graphics.FromImage(tempImg);//              set the file to save the new image to.
                    cutImg.DrawImage(orImg, 0, 0, section, GraphicsUnit.Pixel);// cut the image and save it to tempImg
                    FullsizeImage = tempImg;//save the tempImg as FullsizeImage for resizing later
                    orImg.Dispose();
                    cutImg.Dispose();
                    return FullsizeImage.GetThumbnailImage(width, heigth, null, IntPtr.Zero);
                }
            }
            else newheigth = (int)(FullsizeImage.Height / resize);//  set the new heigth of the current image
        }//return the image resized to the given heigth and width
        return FullsizeImage.GetThumbnailImage(width, newheigth, null, IntPtr.Zero);
    }

関数へのアクセスを簡単にするために、いくつかのオーバーロードされた関数を追加することが可能です:

/// <summary>
    /// Resize image with a directory as source
    /// </summary>
    /// <param name="OriginalFileLocation">Image location</param>
    /// <param name="heigth">new height</param>
    /// <param name="width">new width</param>
    /// <returns>image with new dimentions</returns>
    public Image resizeImageFromFile(String OriginalFileLocation, int heigth, int width)
    {
        return resizeImageFromFile(OriginalFileLocation, heigth, width, false, false);
    }

    /// <summary>
    /// Resize image with a directory as source
    /// </summary>
    /// <param name="OriginalFileLocation">Image location</param>
    /// <param name="heigth">new height</param>
    /// <param name="width">new width</param>
    /// <param name="keepAspectRatio">keep the aspect ratio</param>
    /// <returns>image with new dimentions</returns>
    public Image resizeImageFromFile(String OriginalFileLocation, int heigth, int width, Boolean keepAspectRatio)
    {
        return resizeImageFromFile(OriginalFileLocation, heigth, width, keepAspectRatio, false);
    }

最後の2つのブール値はオプションで設定できます。次のような関数を呼び出します。

System.Drawing.Image ResizedImage = resizeImageFromFile(imageLocation, 800, 400, true, true);

6
public string CreateThumbnail(int maxWidth, int maxHeight, string path)
{

    var image = System.Drawing.Image.FromFile(path);
    var ratioX = (double)maxWidth / image.Width;
    var ratioY = (double)maxHeight / image.Height;
    var ratio = Math.Min(ratioX, ratioY);
    var newWidth = (int)(image.Width * ratio);
    var newHeight = (int)(image.Height * ratio);
    var newImage = new Bitmap(newWidth, newHeight);
    Graphics thumbGraph = Graphics.FromImage(newImage);

    thumbGraph.CompositingQuality = CompositingQuality.HighQuality;
    thumbGraph.SmoothingMode = SmoothingMode.HighQuality;
    //thumbGraph.InterpolationMode = InterpolationMode.HighQualityBicubic;

    thumbGraph.DrawImage(image, 0, 0, newWidth, newHeight);
    image.Dispose();

    string fileRelativePath = "newsizeimages/" + maxWidth + Path.GetFileName(path);
    newImage.Save(Server.MapPath(fileRelativePath), newImage.RawFormat);
    return fileRelativePath;
}

ここをクリックhttp://bhupendrasinghsaini.blogspot.in/2014/07/resize-image-in-c.html


6

これは、特定の要件のために私が作成したコードです。つまり、宛先は常に横長の比率です。それはあなたに良いスタートを与えるでしょう。

public Image ResizeImage(Image source, RectangleF destinationBounds)
{
    RectangleF sourceBounds = new RectangleF(0.0f,0.0f,(float)source.Width, (float)source.Height);
    RectangleF scaleBounds = new RectangleF();

    Image destinationImage = new Bitmap((int)destinationBounds.Width, (int)destinationBounds.Height);
    Graphics graph = Graphics.FromImage(destinationImage);
    graph.InterpolationMode =
        System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;

    // Fill with background color
    graph.FillRectangle(new SolidBrush(System.Drawing.Color.White), destinationBounds);

    float resizeRatio, sourceRatio;
    float scaleWidth, scaleHeight;

    sourceRatio = (float)source.Width / (float)source.Height;

    if (sourceRatio >= 1.0f)
    {
        //landscape
        resizeRatio = destinationBounds.Width / sourceBounds.Width;
        scaleWidth = destinationBounds.Width;
        scaleHeight = sourceBounds.Height * resizeRatio;
        float trimValue = destinationBounds.Height - scaleHeight;
        graph.DrawImage(source, 0, (trimValue / 2), destinationBounds.Width, scaleHeight);
    }
    else
    {
        //portrait
        resizeRatio = destinationBounds.Height/sourceBounds.Height;
        scaleWidth = sourceBounds.Width * resizeRatio;
        scaleHeight = destinationBounds.Height;
        float trimValue = destinationBounds.Width - scaleWidth;
        graph.DrawImage(source, (trimValue / 2), 0, scaleWidth, destinationBounds.Height);
    }

    return destinationImage;

}

驚くばかり!!!私はポートレート画像で困っていました。ウェブで求められている多くの解決策を試した後、これは完璧だった唯一のものでした!どうもありがとうございます!
ファビオ

3

を使用している場合BitmapSource

var resizedBitmap = new TransformedBitmap(
    bitmapSource,
    new ScaleTransform(scaleX, scaleY));

品質をより細かく制御したい場合は、まずこれを実行します。

RenderOptions.SetBitmapScalingMode(
    bitmapSource,
    BitmapScalingMode.HighQuality);

(デフォルトはBitmapScalingMode.Linearと同等BitmapScalingMode.LowQualityです。)


3

ImageProcessorCoreを使用していますが、これは主に.Net Coreで機能するためです。

そして、それはタイプの変換、画像のトリミングなどのより多くのオプションを持っています

http://imageprocessor.org/imageprocessor/


1
私が見たところ、これは.NET Coreをサポートしていません。それは完全なフレームワークに対して構築されています。
クリスドロビソン

1

キャンバスのように幅と高さに合わせて画像のサイズを変更して保存し、画像の比率を維持する

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.IO;

namespace Infra.Files
{
    public static class GenerateThumb
    {
        /// <summary>
        /// Resize and save an image to fit under width and height like a canvas keeping things proportional
        /// </summary>
        /// <param name="originalImagePath"></param>
        /// <param name="thumbImagePath"></param>
        /// <param name="newWidth"></param>
        /// <param name="newHeight"></param>
        public static void GenerateThumbImage(string originalImagePath, string thumbImagePath, int newWidth, int newHeight)
        {
            Bitmap srcBmp = new Bitmap(originalImagePath);
            float ratio = 1;
            float minSize = Math.Min(newHeight, newHeight);

            if (srcBmp.Width > srcBmp.Height)
            {
                ratio = minSize / (float)srcBmp.Width;
            }
            else
            {
                ratio = minSize / (float)srcBmp.Height;
            }

            SizeF newSize = new SizeF(srcBmp.Width * ratio, srcBmp.Height * ratio);
            Bitmap target = new Bitmap((int)newSize.Width, (int)newSize.Height);

            using (Graphics graphics = Graphics.FromImage(target))
            {
                graphics.CompositingQuality = CompositingQuality.HighSpeed;
                graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                graphics.CompositingMode = CompositingMode.SourceCopy;
                graphics.DrawImage(srcBmp, 0, 0, newSize.Width, newSize.Height);

                using (MemoryStream memoryStream = new MemoryStream())
                {
                    target.Save(thumbImagePath);
                }
            }
        }
    }
}

1

画像サイズを変更するには、以下の例で以下の関数を使用します。

//Example : 
System.Net.Mime.MediaTypeNames.Image newImage = System.Net.Mime.MediaTypeNames.Image.FromFile("SampImag.jpg");
System.Net.Mime.MediaTypeNames.Image temImag = FormatImage(newImage, 100, 100);

//image size modification unction   
public static System.Net.Mime.MediaTypeNames.Image FormatImage(System.Net.Mime.MediaTypeNames.Image img, int outputWidth, int outputHeight)
{

    Bitmap outputImage = null;
    Graphics graphics = null;
    try
    {
         outputImage = new Bitmap(outputWidth, outputHeight, System.Drawing.Imaging.PixelFormat.Format16bppRgb555);
         graphics = Graphics.FromImage(outputImage);
         graphics.DrawImage(img, new Rectangle(0, 0, outputWidth, outputHeight),
         new Rectangle(0, 0, img.Width, img.Height), GraphicsUnit.Pixel);

         return outputImage;
     }
     catch (Exception ex)
     {
           return img;
     }
}

2
上記の回答で、このコードの使用方法、コードの機能、および元の質問の問題を解決する方法を説明してください。
TimVisée18年

ユースケースも追加しました。以下の例で上記の関数を使用します。画像newImage = Image.FromFile( "SampImag.jpg"); 画像temImag = FormatImage(newImage、100、100);
Prasad KM


0

注:WebImageはSystem.Webに依存しているため、これはASP.Net Coreでは機能しませんが、ASP.Netの以前のバージョンでは、このスニペットを何度も使用したため便利でした。

String ThumbfullPath = Path.GetFileNameWithoutExtension(file.FileName) + "80x80.jpg";
var ThumbfullPath2 = Path.Combine(ThumbfullPath, fileThumb);
using (MemoryStream stream = new MemoryStream(System.IO.File.ReadAllBytes(fullPath)))
{
      var thumbnail = new WebImage(stream).Resize(80, 80);
      thumbnail.Save(ThumbfullPath2, "jpg");
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.