35 votes

Téléchargement d'images ASP.NET avec redimensionnement

J'ai une page aspx qui téléchargera des images sur le disque dur du serveur à partir du PC client

Mais maintenant, je dois changer mon programme de telle manière qu'il me permette de redimensionner l'image lors du téléchargement.

Quelqu'un a-t-il une idée à ce sujet? Je ne pouvais pas trouver de telles propriétés / méthodes avec le contrôle du serveur de fichiers d'entrée

Quelqu'un est là pour me guider?

16voto

JPrescottSanders Points 1595

Une fois le fichier enregistré sur le serveur, vous pouvez utiliser un code comme celui-ci pour redimensionner. Ce code prendra en charge le rapport longueur / largeur lors du redimensionnement.

 public static Bitmap CreateThumbnail(string lcFilename, int lnWidth, int lnHeight)
{

    System.Drawing.Bitmap bmpOut = null;

    try
    {
        Bitmap loBMP = new Bitmap(lcFilename);
        ImageFormat loFormat = loBMP.RawFormat;

        decimal lnRatio;
        int lnNewWidth = 0;
        int lnNewHeight = 0;

        if (loBMP.Width < lnWidth && loBMP.Height < lnHeight)
            return loBMP;

        if (loBMP.Width > loBMP.Height)
        {
            lnRatio = (decimal)lnWidth / loBMP.Width;
            lnNewWidth = lnWidth;
            decimal lnTemp = loBMP.Height * lnRatio;
            lnNewHeight = (int)lnTemp;
        }
        else
        {
            lnRatio = (decimal)lnHeight / loBMP.Height;
            lnNewHeight = lnHeight;
            decimal lnTemp = loBMP.Width * lnRatio;
            lnNewWidth = (int)lnTemp;
        }


        bmpOut = new Bitmap(lnNewWidth, lnNewHeight);
        Graphics g = Graphics.FromImage(bmpOut);
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
        g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
        g.FillRectangle(Brushes.White, 0, 0, lnNewWidth, lnNewHeight);
        g.DrawImage(loBMP, 0, 0, lnNewWidth, lnNewHeight);

        loBMP.Dispose();
    }
    catch
    {
        return null;
    }
    return bmpOut;
}
 

5voto

Dillie-O Points 16780

Vous ne pourrez pas redimensionner "à la volée" car vous aurez besoin d'avoir l'image complète avant d'effectuer des transformations d'image. Cependant, une fois le téléchargement terminé et avant d'afficher les résultats à votre utilisateur, vous pouvez utiliser cette méthode de redimensionnement d'image de base que j'ai utilisée dans quelques-unes de mes applications:

    ''' <summary>
   '''    Resize image with GDI+ so that image is nice and clear with required size.
   ''' </summary>
   ''' <param name="SourceImage">Image to resize</param>
   ''' <param name="NewHeight">New height to resize to.</param>
   ''' <param name="NewWidth">New width to resize to.</param>
   ''' <returns>Image object resized to new dimensions.</returns>
   ''' <remarks></remarks>
   Public Shared Function ImageResize(ByVal SourceImage As Image, ByVal NewHeight As Int32, ByVal NewWidth As Int32) As Image

      Dim bitmap As System.Drawing.Bitmap = New System.Drawing.Bitmap(NewWidth, NewHeight, SourceImage.PixelFormat)

      If bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Format1bppIndexed Or _
          bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Format4bppIndexed Or _
          bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Format8bppIndexed Or _
          bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Undefined Or _
          bitmap.PixelFormat = Drawing.Imaging.PixelFormat.DontCare Or _
          bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Format16bppArgb1555 Or _
          bitmap.PixelFormat = Drawing.Imaging.PixelFormat.Format16bppGrayScale Then
         Throw New NotSupportedException("Pixel format of the image is not supported.")
      End If

      Dim graphicsImage As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(bitmap)

      graphicsImage.SmoothingMode = Drawing.Drawing2D.SmoothingMode.HighQuality
      graphicsImage.InterpolationMode = Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
      graphicsImage.DrawImage(SourceImage, 0, 0, bitmap.Width, bitmap.Height)
      graphicsImage.Dispose()
      Return bitmap

   End Function
 

4voto

Naeem Sarfraz Points 2907

Une autre approche consisterait à permettre à l'utilisateur d'ajuster la taille dans le navigateur, puis de redimensionner l'image comme décrit dans d'autres réponses.

Jetez donc un œil à cette solution qui vous permet de télécharger et de recadrer des images avec jQuery, jCrop & ASP.NET .

4voto

Satinder singh Points 3089

C'est la façon dont je l'ai fait dans mon projet, qui est basé sur votre état de santé (hauteur/largeur) , vous pouvez modifier le paramètre ie(MaxHeight)

 public static System.Drawing.Image ScaleImage(System.Drawing.Image image, int maxHeight)
        {
            var ratio = (double)maxHeight / image.Height;

            var newWidth = (int)(image.Width * ratio);
            var newHeight = (int)(image.Height * ratio);

            var newImage = new Bitmap(newWidth, newHeight);
            using (var g = Graphics.FromImage(newImage))
            {
                g.DrawImage(image, 0, 0, newWidth, newHeight);
            }
            return newImage;
        }

Sur le Bouton cliquez sur:

protected void Button1_Click(object sender, EventArgs e)
{
  lblmsg.Text="";
  if ((File1.PostedFile != null) && (File1.PostedFile.ContentLength > 0))
  {
    Guid uid = Guid.NewGuid();
    string fn = System.IO.Path.GetFileName(File1.PostedFile.FileName);
    string SaveLocation = Server.MapPath("LogoImagesFolder") + "\\" + uid+fn;
    try
    {
      string fileExtention = File1.PostedFile.ContentType;
      int fileLenght = File1.PostedFile.ContentLength;
      if (fileExtention == "image/png" || fileExtention == "image/jpeg" || fileExtention == "image/x-png")
      {
        if (fileLenght <= 1048576)
        {
          System.Drawing.Bitmap bmpPostedImage = new System.Drawing.Bitmap(File1.PostedFile.InputStream);
          System.Drawing.Image objImage = ScaleImage(bmpPostedImage, 81);
          objImage.Save(SaveLocation,ImageFormat.Png);
          lblmsg.Text = "The file has been uploaded.";
          lblmsg.Style.Add("Color", "Green");
         }
         else 
         {
           lblmsg.Text = "Image size cannot be more then 1 MB.";
           lblmsg.Style.Add("Color", "Red");
          }
       }
     else {
             lblmsg.Text = "Invaild Format!";
             lblmsg.Style.Add("Color", "Red");
           }
     }
     catch (Exception ex)
       {
          lblmsg.Text= "Error: " + ex.Message;
          lblmsg.Style.Add("Color", "Red");
       }
   }
 }

Plus De Détails

http://satindersinght.blogspot.in/2012/08/how-to-resize-image-while-uploading-in.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X