在vb.net中更正图像方向服务器端

时间:2013-10-10 21:28:37

标签: vb.net image orientation exif

在我正在开发的移动网络应用程序中,用户可以使用相机拍照并将相机图像上传到服务器。我遇到的问题是,在iOS设备上,图像会获得与它们相关联的EXIF Orientation标记,例如“ROTATE 90 CW”。此方向标记会在显示图像时以错误的方向显示图像。例如,如果用户以纵向方向拍摄iPhone的图片,则在服务器上查看时图像似乎会旋转为横向。我想在服务器端使用VB.Net更正此问题,以便我自动检测EXIF Orientation标签,如果它是“ROTATE 90 CW”(或任何其他值会使图像看起来显示不正确),然后我想自动将图像旋转到正确的方向。总之,我希望服务器上的图像与用户用相机拍照时的图像完全一致。

有人可以发布会执行此操作的代码吗?提前谢谢。

2 个答案:

答案 0 :(得分:15)

对于任何需要此功能的人,我基本上都是在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

答案 1 :(得分:0)

对于任何有兴趣的人...... C#版。

public static bool TestRotate(string filePath)
{
    var rft = RotateFlipType.RotateNoneFlipNone;
    var img = Image.FromFile(filePath);
    var properties = img.PropertyItems;
    var value = false;

    foreach (var prop in properties.Where(i => i.Id == 274))
    {
        var orientation = BitConverter.ToInt16(prop.Value, 0);
        rft = orientation == 1 ? RotateFlipType.RotateNoneFlipNone :
                orientation == 3 ? RotateFlipType.Rotate180FlipNone :
                orientation == 6 ? RotateFlipType.Rotate90FlipNone :
                orientation == 8 ? RotateFlipType.Rotate270FlipNone :
                RotateFlipType.RotateNoneFlipNone;
    }

    if (rft != RotateFlipType.RotateNoneFlipNone)
    {
        img.RotateFlip(rft);
        File.Delete(filePath);
        img.Save(filePath, ImageFormat.Jpeg);
        value = true;
    }

    return value;
}