0

asp.net.I で画像のサイズを変更しています。

ここで私のコードは、画像フォーマットを jpeg に設定すると機能しません。C# には .jpg の画像フォーマットがないためです。

 public static System.Drawing.Image ScaleImage(System.Drawing.Image image, int maxWidth, int maxHeight)
    {
        var width=image.Width;
        var height=image.Height;

        var newWidth=0;
        var newHeight=0;
        var divisor=0;
        if (width > height) {
                    newWidth = maxWidth;
                    divisor = width / maxWidth;
                    if (divisor == 0)
                    {
                        divisor = 1;
                    }
                    newHeight = Convert.ToInt32(height /divisor);
                }
                else {
                    newHeight = maxHeight;
                    divisor = height / maxHeight;
                    if (divisor == 0)
                    {
                        divisor = 1;
                    }
                    newWidth = Convert.ToInt32(width / divisor);
                }


        var newImage = new Bitmap(newWidth, newHeight);

        Graphics.FromImage(newImage).DrawImage(image, 0, 0, newWidth, newHeight);
        return newImage;

    }

public static Stream ToStream(this System.Drawing.Image image, ImageFormat formaw)
    {
        var stream = new System.IO.MemoryStream();
        //stream.ReadTimeout = 100000;
        image.Save(stream, formaw);
        stream.Position = 0;
        //stream.ReadTimeout = 100000;
        return stream;
    }
4

2 に答える 2

1

皆さん、ASP.NET サービスで使用する場合は、すべてSystem.Drawingのクラスを明示的に破棄する必要があります。これはオプションではありません。大量のトラフィックでサーバーをクラッシュさせます。

現在、コードは GC に依存してGraphicsandBitmapインスタンスの割り当てを解除しています。残念ながら、GC は両方のオブジェクトを小さな優先度の低いオブジェクトと見なし、実際に 100 MB 以上の RAM を占有していることを知りません。

画像のサイズ変更を安全に、より良い品質で行う方法の例を次に示します。

ライトサイズ変更

MIT ライセンスなので、心配する使用制限はありません。

于 2012-07-30T16:42:58.583 に答える
0

探しているImageFormat は ImageFormat.Jpegです。

于 2012-07-19T14:30:19.093 に答える