获取图片 exif 的 orientation 信息核心代码,然后根据 orientation 进行图片不同方向的旋转

效果展示

核心代码

 
private Image OrientationImage(Image image)
{
    if (Array.IndexOf(image.PropertyIdList, 274) > -1)
    {
        var orientation = (int)image.GetPropertyItem(274).Value[0];
        switch (orientation)
        {
            case 1:
                // No rotation required.
                break;
            case 2:
                image.RotateFlip(RotateFlipType.RotateNoneFlipX);
                break;
            case 3:
                image.RotateFlip(RotateFlipType.Rotate180FlipNone);
                break;
            case 4:
                image.RotateFlip(RotateFlipType.Rotate180FlipX);
                break;
            case 5:
                image.RotateFlip(RotateFlipType.Rotate90FlipX);
                break;
            case 6:
                image.RotateFlip(RotateFlipType.Rotate90FlipNone);
                break;
            case 7:
                image.RotateFlip(RotateFlipType.Rotate270FlipX);
                break;
            case 8:
                image.RotateFlip(RotateFlipType.Rotate270FlipNone);
                break;
        }
        image.RemovePropertyItem(274);

    }
    return image;
}

 

文件转为image类型

上传的图片文件(file(IFormFile) 或者 base64(string) 需转为 image,然后直接调用上面方法,输出新的 image
保存(save方法)即可

file 的话

 Image img = Bitmap.FromStream(file.OpenReadStream()); 

base64 的话

 string base64string = HttpUtility.UrlDecode(base64);
 base64string = base64string.Replace(" ", "+").Split(',')[1];
 byte[] bt = Convert.FromBase64String(base64string);
 MemoryStream ms = new MemoryStream(bt);
 Image img = Image.FromStream(ms);