2013-06-19 4 views
7

Mam poniżej kod do przesyłania i zmiany rozmiaru zdjęć z urządzeń IOS do mojej aplikacji .net. Użytkownicy używają do robienia zdjęć w orientacji pionowej, a następnie wszystkie obrazy pojawiają się w mojej aplikacji z nieprawidłowym obrotem. Wszelkie sugestie, jak to naprawić?Prześlij z obrazu IOS do aplikacji .net: Rotate

  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); 

Odpowiedz

1

Należy odczytać wartość Orientację obrazka z danych EXIF ​​w kolekcji Image.PropertyItems i obróć go odpowiednio.

+0

Kod jakiś przykład? Nie mogę się dowiedzieć, jak z powodzeniem wdrożyć to w moim kodzie. –

+2

Przepraszamy. Jesteś już na właściwym obiekcie Image, dałem ci link do przeczytania. Zdecydowanie uważam, że ważne jest uczenie się przez działanie, a nie przez kopiowanie kodu. (Nie że są tam setki próbek kodu.) – Alexander

25

Tu idziesz przyjacielu:

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, aby użyć 'PropertyIdList.Contains()' musisz uwzględnić 'using System.Linq'. –

+0

Uratowałeś mi tutaj swój pączek! –

+1

Brak niektórych wartości, ta właściwość może zawierać dowolną wartość od 1 do 8: http://www.impulseadventure.com/photo/exif-orientation.html – Guillaume