1

次のコード行を取得HttpPostedFileBaseして画像に変換します。

Encoder Parameteres をいじって画像のサイズを変更しようとしましたが、これを行うことができないようです。

画像のサイズを 250x250 に変更する最良の方法は何ですか?

また、ランダムな場所ではなく、画像の中央を 250x250 の長方形にすることをお勧めします。

データベースに保存される画像を変換して保存する最もスペース効率の良い方法は何ですか?

model.Image型ですのでご注意くださいHttpPostedFileBase

var image = Image.FromStream(model.Image.InputStream, true, true);

ImageCodecInfo jpgInfo = ImageCodecInfo.GetImageEncoders()
    .Where(codecInfo => codecInfo.MimeType == "image/jpeg").First();
using (EncoderParameters encParams = new EncoderParameters(1))
{
    encParams.Param[0] = new EncoderParameter(Encoder.Quality, (long)50);

    //quality should be in the range [0..100]
    using (var ms = new MemoryStream())
    {
        // Convert Image to byte[]
        image.Save(ms, ImageFormat.Jpeg);
        byte[] imageBytes = ms.ToArray();

        // Convert byte[] to Base64 String
        string base64String = Convert.ToBase64String(imageBytes);
        image64 = base64String;
    }
}
4

1 に答える 1

1

最善の方法は、ImageResizerのような確立されたライブラリを使用することです。そうすれば、車輪の再発明を避けることができます。容量効率(ファイルサイズ)を重視する場合は、最大圧縮率の JPEG 形式を使用してください。JPEG の非可逆エンコーディングを使用すると、画質が大幅に低下することに注意してください。無損失エンコーディングを使用する場合は、PNG を試してください。私の経験では、.NET で PNG 画像を圧縮することは非常に困難です。しばらく前に、それを実行できる単一のライブラリを探しましたが、無駄に検索されましたが、見つけたのはシッククライアントの Windows アプリケーションだけでした。

于 2014-03-14T16:02:13.600 に答える