[英]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.