Вам не нужно сначала сохранять файл на диск, вы можете изменить его размер в памяти. Я использую код, подобный следующему, чтобы изменить размер изображения, загруженного в фотоальбом. Объект HttpPostedFile имеет свойство InputStream, которое позволит вам получить реальный поток. ToStream позволяет вам транслировать вывод на что угодно (ответ, файл и т. Д.). Это обеспечит правильное масштабирование изображения для размещения в рамке шириной до 640 или высотой 480. Возможно, вы захотите поместить их в файл конфигурации, а не жестко их кодировать.
private void ResizeImage( Stream fromStream, Stream toStream )
{
const double maxWidth = 640;
const double maxHeight = 480;
using( Image image = Image.FromStream( fromStream ) )
{
double widthScale = 1;
if( image.Width > maxWidth )
{
widthScale = maxWidth / image.Width;
}
double heightScale = 1;
if( image.Height > maxHeight )
{
heightScale = maxHeight / image.Height;
}
if( widthScale < 1 || heightScale < 1 )
{
double scaleFactor = widthScale < heightScale ? widthScale : heightScale;
int newWidth = (int)(image.Width * scaleFactor);
int newHeight = (int)(image.Height * scaleFactor);
using( Bitmap thumbnailBitmap = new Bitmap( newWidth, newHeight ) )
{
using( Graphics thumbnailGraph = Graphics.FromImage( thumbnailBitmap ) )
{
thumbnailGraph.CompositingQuality = CompositingQuality.HighQuality;
thumbnailGraph.SmoothingMode = SmoothingMode.HighQuality;
thumbnailGraph.InterpolationMode = InterpolationMode.HighQualityBicubic;
Rectangle imageRectangle = new Rectangle( 0, 0, newWidth, newHeight );
thumbnailGraph.DrawImage( image, imageRectangle );
ImageCodecInfo jpegCodec = ImageCodecInfo.GetImageEncoders()
.FirstOrDefault( c => c.FormatDescription == "JPEG" );
if( jpegCodec != null )
{
EncoderParameters encoderParameters = new EncoderParameters( 1 );
encoderParameters.Param[0] = new EncoderParameter( Encoder.Quality, 100L );
thumbnailBitmap.Save( toStream, jpegCodec, encoderParameters );
}
else
{
thumbnailBitmap.Save( toStream, ImageFormat.Jpeg );
}
}
}
}
else
{
image.Save( toStream, ImageFormat.Jpeg );
}
}
}