簡體   English   中英

iOS中的Exif方向問題

[英]Exif Orientation issue in iOS

在Safari iOS中,一個已知問題是,使用相機拍攝的大圖像上都設置了exif方向標記,這會使觀看時圖像的方向不正確。 例如,如果iPhone處於縱向,並且拍攝了照片,則生成的圖像似乎會旋轉為橫向。 已經創建了名為megapix-image.js和exif.js的Jquery插件來處理這種情況,方法是檢測相機圖像上的exif方向標記並自動旋轉圖像以對其進行補償。 我在Web應用程序中使用了它,它在客戶端運行良好,但是我遇到的問題是我需要將旋轉后的圖像返回到服務器。 發送回服務器的圖像是輸入type = file控件中的圖像。 這是megapix-image用來旋轉圖像的圖像源。 我需要做的是用旋轉的圖像替換存儲在輸入type = file控件內部的圖像,這樣它將成為上載的圖像。 換句話說,僅在客戶端旋轉圖像沒有任何意義,除了讓用戶暫時看到圖像的方向與使用相機拍攝照片時的方向相同。 最重要的是,旋轉后的圖像被上傳回服務器。 我希望我說的清楚,這是有道理的。 如何將旋轉后的圖像返回到輸入type = file控件中,這樣它將成為上載的圖像,而不是方向錯誤的圖像?

編輯:

我在各種設備上進行了更多測試:在運行iOS 7的iPhone4,運行iOS 7的iPad和運行iOS 6的iPad上,通過輸入type = file控件在Safari和服務器上均出現方向問題。 垂直壓縮/子采樣問題已在iPhone4和iPad的iOS 7中修復。 在運行iOS 7的iPhone 5C上,Safari中的方向是正確的,但是存在垂直壓縮/子采樣問題。

該問題已解決,如下所示:

正如Ray Nicholus所說,您不能在文件控件內部修改圖像文件數據,因此必須在服務器端完成任何操作。 以下是我創建的用於更改圖像方向服務器端的VB.Net代碼,它可以完美運行。 基本上,它將通過將其旋轉到正確的方向來自動校正任何圖像,從而使其看起來正確:

  Public Function TestRotate(sImageFilePath As String) As Boolean
    Dim rft As RotateFlipType = RotateFlipType.RotateNoneFlipNone
    Dim img As Bitmap = Image.FromFile(sImageFilePath)
    Dim properties As PropertyItem() = img.PropertyItems
    Dim bReturn As Boolean = False
    For Each p As PropertyItem In properties
      If p.Id = 274 Then
        Dim orientation As Short = BitConverter.ToInt16(p.Value, 0)
        Select Case orientation
          Case 1
            rft = RotateFlipType.RotateNoneFlipNone
          Case 3
            rft = RotateFlipType.Rotate180FlipNone
          Case 6
            rft = RotateFlipType.Rotate90FlipNone
          Case 8
            rft = RotateFlipType.Rotate270FlipNone
        End Select
      End If
    Next
    If rft <> RotateFlipType.RotateNoneFlipNone Then
      img.RotateFlip(rft)
      System.IO.File.Delete(sImageFilePath)
      img.Save(sImageFilePath, System.Drawing.Imaging.ImageFormat.Jpeg)
      bReturn = True
    End If
    Return bReturn

  End Function

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM