繁体   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