@ -7,6 +7,7 @@ using System.Threading.Tasks;
using SixLabors.ImageSharp.Advanced ;
using SixLabors.ImageSharp.Advanced ;
using SixLabors.ImageSharp.Helpers ;
using SixLabors.ImageSharp.Helpers ;
using SixLabors.ImageSharp.Memory ;
using SixLabors.ImageSharp.Memory ;
using SixLabors.ImageSharp.MetaData.Profiles.Exif ;
using SixLabors.ImageSharp.PixelFormats ;
using SixLabors.ImageSharp.PixelFormats ;
using SixLabors.Primitives ;
using SixLabors.Primitives ;
@ -24,6 +25,11 @@ namespace SixLabors.ImageSharp.Processing.Processors
/// </summary>
/// </summary>
private Matrix3x2 processMatrix ;
private Matrix3x2 processMatrix ;
/// <summary>
/// The final rotated angle.
/// </summary>
private int optimizedRotatedAngle ;
/// <summary>
/// <summary>
/// Gets or sets the angle of processMatrix in degrees.
/// Gets or sets the angle of processMatrix in degrees.
/// </summary>
/// </summary>
@ -87,6 +93,30 @@ namespace SixLabors.ImageSharp.Processing.Processors
}
}
}
}
/// <inheritdoc/>
protected override void AfterImageApply ( Image < TPixel > 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 ) ;
}
}
/// <summary>
/// <summary>
/// Rotates the images with an optimized method when the angle is 90, 180 or 270 degrees.
/// Rotates the images with an optimized method when the angle is 90, 180 or 270 degrees.
/// </summary>
/// </summary>