Изменение размера изображения перед загрузкой в ​​VB - PullRequest
0 голосов
/ 06 января 2012

Я хочу изменить разрешение изображения перед его загрузкой в ​​локальное хранилище.Сейчас изображение сохраняется в полном разрешении, и мне нужно вручную изменить его размер, используя width="200" height="200" или тег css в aspx.Я хочу уменьшить размер файла изображения перед его сохранением, следовательно, путем изменения разрешения изображения, когда пользователь загружает его с помощью кнопки.Я пытался использовать System.Drawing раньше и устанавливал изменение размеров int imageHeight и int maxWidth, но не смог заставить его работать.

Кто-нибудь знает, как это сделать?

Мой код на данный момент:

Protected Sub btn_SavePic_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn_SavePic.Click
    Dim newFileName As String
    Dim SqlString As String
    If fup_Picture.HasFile Then
        Dim myGUID = Guid.NewGuid()
        newFileName = myGUID.ToString() & ".jpg"
        Dim fileLocationOnServerHardDisk = Request.MapPath("Picture") & "/" & newFileName
        fup_Picture.SaveAs(fileLocationOnServerHardDisk)
    End If

1 Ответ

3 голосов
/ 06 января 2012

Вам не нужно сначала сохранять файл на диск, вы можете изменить его размер в памяти. Я использую код, подобный следующему, чтобы изменить размер изображения, загруженного в фотоальбом. Объект 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 );
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...