iOS 中的 Exif 方向问题
Exif Orientation issue in iOS
在 Safari iOS 中,使用相机拍摄的大图像上设置了一个 exif 方向标志,这使得图像在查看时方向不正确,这是一个已知问题。 例如,如果 iPhone 处于纵向并拍摄了照片,则生成的图像将显示为横向旋转。 Jquery 插件名为 megapix-image.js 和 exif.js 是通过检测相机图像上的 exif 方向标志并自动旋转图像来补偿这种情况来处理这种情况的。 我在我的 Web 应用程序中使用它,它在客户端运行良好,但我遇到的问题是我需要将旋转的图像放回服务器。 发送回服务器的图像是输入类型=文件控件中的图像。 这是百万像素图像用于旋转图像的图像源。 我需要做的是将存储在输入类型=文件控件中的图像替换为旋转的图像,以便它成为上传的图像。换句话说,仅仅在客户端旋转图像没有任何价值,除了让用户暂时看到图像与他们使用相机拍摄照片时的方向相同。 最重要的是旋转的图像被上传回服务器。我希望我的措辞很清楚,这是有道理的。如何将旋转的图像放回输入 type=file 控件中,以便它成为上传的图像,而不是方向不正确的图像?
编辑:
我在各种设备上做了更多的测试:在运行iOS 7的iPhone4,运行iOS 7的iPad和运行iOS 6的iPad上,方向问题在Safari和服务器上都存在输入类型=文件控制。 垂直挤压/子采样问题已在 iPhone 4 和 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
- 在指令控制器中使用$attrs时出现问题
- 将PHP变量传递给jQuery时遇到问题
- Canvas Html5绘图应用程序,移动画布会导致重大问题
- 参数变量出现ngTable指令问题
- 剑道网格jQuery动画()问题
- ng映射方向备选方案
- 我的jQuery插件参数没有正确启动,遇到了问题
- Phonegap-(安卓/iphone)多个图像的图像库出现问题
- Internet Explorer 中的 JavaScript 方向更改问题
- 相机拍摄手机间隙2.9.0中的方向问题
- 方向问题地图谷歌地图 API
- iOS 中的 Exif 方向问题
- 使用谷歌方向 API 问题绘制超过 8 个航点的路线图
- jQuery将问题动画化-动态选择方向
- 谷歌方向矩阵API的问题
- 在Google Maps API v3中显示多个标记和方向变量的infoWindows问题
- Android上HTML 5的设备方向问题
- Android版Firefox中设备方向代码的问题
- 滑动器(高度问题-多个滑动器-垂直方向)
- Flexslider rtl滑动方向问题