2015-11-02 2 views
0

Je souhaite redimensionner l'image (créer des vignettes) lors du téléchargement de fichier. Mais il semble ne pas lire correctement le chemin et il s'écraser ...Redimensionnement de l'image lors du téléchargement de fichier - C#

CODE:

if (FileUpload1.HasFile) 
     { 
      string imageFile = FileUpload1.FileName; 
      string path = "~/images/galeria/" + imageFile; 
      cmd.Parameters.Add("@IMAGE_URL", System.Data.SqlDbType.NVarChar).Value = path; 
      FileUpload1.SaveAs(Server.MapPath(path)); 

      System.Drawing.Image image = System.Drawing.Image.FromFile(path); 
      float aspectRatio = (float)image.Size.Width/(float)image.Size.Height; 
      int newHeight = 200; 
      int newWidth = Convert.ToInt32(aspectRatio * newHeight); 
      System.Drawing.Bitmap thumbBitmap = new System.Drawing.Bitmap(newWidth, newHeight); 
      System.Drawing.Graphics thumbGraph = System.Drawing.Graphics.FromImage(thumbBitmap); 
      thumbGraph.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; 
      thumbGraph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 
      thumbGraph.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
      var imageRectangle = new Rectangle(0, 0, newWidth, newHeight); 
      thumbGraph.DrawImage(image, imageRectangle); 
      thumbBitmap.Save("~/images/galeria/thumb/" + FileUpload1.FileName, System.Drawing.Imaging.ImageFormat.Jpeg); 
      thumbGraph.Dispose(); 
      thumbBitmap.Dispose(); 
      image.Dispose(); 
     } 

Il est d'enregistrer l'image dans le répertoire, mais il ne lit pas le chemin, de sorte que le aspectRatio ne peut pas obtenir sa taille. Des idées?

EDIT1: Message d'erreur: Une exception de type 'System.IO.FileNotFoundException' a eu lieu en System.Drawing.dll mais n'a pas été traitée dans le code utilisateur

Informations complémentaires: imagepath ici.

EDIT2: Une exception de type 'System.Runtime.InteropServices.ExternalException' s'est produite dans System.Drawing.dll mais n'a pas été traitée dans le code utilisateur Informations supplémentaires: Une erreur générique s'est produite dans GDI +. Cette ligne est à l'origine d'erreur:

thumbBitmap.Save("~/images/galeria/thumb/" + FileUpload1.FileName, System.Drawing.Imaging.ImageFormat.Jpeg); 
+0

Avez-vous vérifié pour vous assurer que le fichier existe réellement après l'avoir sauvegardé? –

+0

Oui, c'est enregistré correctement. Peut-être que c'est le traitement pour redimensionner l'image avant qu'il ne soit fini d'enregistrer. Comment puis-je lui donner le temps d'économiser? – Ashiv3r

+0

Je voudrais juste déboguer à travers le code et après la sauvegarde est exécutée, mais avant le chargement à partir du fichier, vérifiez le fichier, puis exécutez le chargement et voir si elle erreurs. Si le fichier est là et qu'il contient toujours des erreurs, cela ne doit pas être le problème. –

Répondre

2

utilisation Server.MapPath (trajet) pour lire le chemin. Vous l'utilisez pour enregistrer, mais pas pour lire.

if (FileUpload1.HasFile) 
     { 
      string imageFile = FileUpload1.FileName; 
      string path = Server.MapPath("~/images/galeria/" + imageFile); 
      FileUpload1.SaveAs(path); 

      System.Drawing.Image image = System.Drawing.Image.FromFile(path); 
      float aspectRatio = (float)image.Size.Width/(float)image.Size.Height; 
      int newHeight = 200; 
      int newWidth = Convert.ToInt32(aspectRatio * newHeight); 
      System.Drawing.Bitmap thumbBitmap = new System.Drawing.Bitmap(newWidth, newHeight); 
      System.Drawing.Graphics thumbGraph = System.Drawing.Graphics.FromImage(thumbBitmap); 
      thumbGraph.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; 
      thumbGraph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 
      thumbGraph.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
      var imageRectangle = new Rectangle(0, 0, newWidth, newHeight); 
      thumbGraph.DrawImage(image, imageRectangle); 
      thumbBitmap.Save(Server.MapPath("~/images/galeria/thumb/" + FileUpload1.FileName), System.Drawing.Imaging.ImageFormat.Jpeg); 
      thumbGraph.Dispose(); 
      thumbBitmap.Dispose(); 
      image.Dispose(); 
     } 
+0

Il me donne une erreur comme dans EDIT 1. – Ashiv3r

+0

Vérifiez la modification. S'il vous plaît créer la structure du dossier en images/galeria/thumb. Si la structure du dossier n'est pas là, il va lancer une erreur. J'ai couru le code et ça va. Vous pouvez également créer les dossiers de manière pragmatique. Pouce levé si je suis capable d'aider :) – Thinkbeforeyouread

+0

Il me donne toujours la même erreur à ce stade. – Ashiv3r