获取图片 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);