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