diff --git a/src/ImageSharp/Processing/Processors/Transforms/RotateProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/RotateProcessor.cs
index a7fb400ac..f057c8254 100644
--- a/src/ImageSharp/Processing/Processors/Transforms/RotateProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Transforms/RotateProcessor.cs
@@ -7,6 +7,7 @@ using System.Threading.Tasks;
using SixLabors.ImageSharp.Advanced;
using SixLabors.ImageSharp.Helpers;
using SixLabors.ImageSharp.Memory;
+using SixLabors.ImageSharp.MetaData.Profiles.Exif;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.Primitives;
@@ -24,6 +25,11 @@ namespace SixLabors.ImageSharp.Processing.Processors
///
private Matrix3x2 processMatrix;
+ ///
+ /// The final rotated angle.
+ ///
+ private int optimizedRotatedAngle;
+
///
/// Gets or sets the angle of processMatrix in degrees.
///
@@ -87,6 +93,30 @@ namespace SixLabors.ImageSharp.Processing.Processors
}
}
+ ///
+ protected override void AfterImageApply(Image source, Rectangle sourceRectangle)
+ {
+ ExifProfile profile = source.MetaData.ExifProfile;
+ if (profile == null)
+ {
+ return;
+ }
+
+ if (MathF.Abs(this.Angle) < Constants.Epsilon)
+ {
+ // No need to do anything so return.
+ return;
+ }
+
+ profile.RemoveValue(ExifTag.Orientation);
+
+ if (this.Expand && profile.GetValue(ExifTag.PixelXDimension) != null)
+ {
+ profile.SetValue(ExifTag.PixelXDimension, source.Width);
+ profile.SetValue(ExifTag.PixelYDimension, source.Height);
+ }
+ }
+
///
/// Rotates the images with an optimized method when the angle is 90, 180 or 270 degrees.
///