2013-06-19 3 views
7

Ich habe unter Code zum Hochladen und Ändern der Größe von Bildern von IOS-Geräten zu meiner .net-Anwendung. Benutzer verwenden, um Bild im Hochformat zu machen, und dann erscheinen alle Bilder in meiner App mit falscher Rotation. Irgendwelche Vorschläge, wie das zu beheben ist?Upload von IOS Bild zu .net App: Drehen

  string fileName = Server.HtmlEncode(FileUploadFormbilde.FileName); 
      string extension = System.IO.Path.GetExtension(fileName); 
      System.Drawing.Image image_file = System.Drawing.Image.FromStream(FileUploadFormbilde.PostedFile.InputStream); 
      int image_height = image_file.Height; 
      int image_width = image_file.Width; 
      int max_height = 300; 
      int max_width = 300; 

      image_height = (image_height * max_width)/image_width; 
      image_width = max_width; 

      if (image_height > max_height) 
      { 
       image_width = (image_width * max_height)/image_height; 
       image_height = max_height; 
      } 

      Bitmap bitmap_file = new Bitmap(image_file, image_width, image_height); 
      System.IO.MemoryStream stream = new System.IO.MemoryStream(); 

      bitmap_file.Save(stream, System.Drawing.Imaging.ImageFormat.Png); 
      stream.Position = 0; 

      byte[] data = new byte[stream.Length + 1]; 
      stream.Read(data, 0, data.Length); 

Antwort

1

Sie müssen das Image des Orientierungswert aus den EXIF-Daten in der Image.PropertyItems Sammlung, lesen und entsprechend drehen.

+0

Jedes Code-Beispiel? Ich kann nicht herausfinden, wie dies in meinem Code erfolgreich implementiert werden kann. –

+2

Entschuldigung. Du bist bereits auf dem richtigen Bildobjekt, ich habe dir einen Link zum Lesen gegeben. Ich bin der festen Überzeugung, dass es wichtig ist, etwas zu lernen, nicht durch Kopieren-Einfügen-Code. (Nicht, dass es hunderte Code-Beispiele gibt.) – Alexander

25

Hier gehen Sie meinen Freund:

Image originalImage = Image.FromStream(data); 

if (originalImage.PropertyIdList.Contains(0x0112)) 
     { 
      int rotationValue = originalImage.GetPropertyItem(0x0112).Value[0]; 
      switch (rotationValue) 
      { 
       case 1: // landscape, do nothing 
        break; 

       case 8: // rotated 90 right 
        // de-rotate: 
        originalImage.RotateFlip(rotateFlipType: RotateFlipType.Rotate270FlipNone); 
        break; 

       case 3: // bottoms up 
        originalImage.RotateFlip(rotateFlipType: RotateFlipType.Rotate180FlipNone); 
        break; 

       case 6: // rotated 90 left 
        originalImage.RotateFlip(rotateFlipType: RotateFlipType.Rotate90FlipNone); 
        break; 
      } 
     } 
+1

FYI, um 'PropertyIdList.Contains()' zu verwenden, müssen Sie 'using System.Linq' hinzufügen. –

+0

Du hast meinen Hintern hier gerettet! –

+1

Einige Werte fehlen, diese Eigenschaft kann einen beliebigen Wert von 1 bis 8 enthalten: http://www.impulseadventure.com/photo/exif-orientation.html – Guillaume