0

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

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

Мой код до сих пор:

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 

ответ

3

Вам не нужно, чтобы сохранить файл на диск первым, вы можете изменить его в памяти. Для изменения размера изображения, загруженного в фотоальбом, я использую код, похожий на следующий. Объект HttpPostedFile имеет свойство InputStream, которое позволит вам получить фактический поток. ToStream позволяет передавать поток на все, что вы хотите (Response, file и т. Д.). Это обеспечит правильное масштабирование изображения, чтобы оно поместилось в коробку шириной до 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); 
     } 
    } 
} 
+0

+1. Я удалил свой ответ, а ваш лучше. –

Смежные вопросы