From dff165eb5602547bc46d0f26da25a51be64e140c Mon Sep 17 00:00:00 2001 From: JimBobSquarePants Date: Sun, 19 Aug 2012 15:50:40 +0100 Subject: [PATCH] Updated rotate method and Nuget manifests Former-commit-id: c381d9fa5db522984c7d16fc87e92a1187b4a3a7 --- .../Properties/AssemblyInfo.cs | 4 +- src/ImageProcessor/ImageFactory.cs | 30 ++- src/ImageProcessor/ImageProcessor.csproj | 1 + src/ImageProcessor/ImageProcessor.sln | 4 +- src/ImageProcessor/Imaging/RotateLayer.cs | 40 ++++ src/ImageProcessor/Processors/Filter.cs | 13 +- src/ImageProcessor/Processors/Rotate.cs | 171 ++++++++++++------ src/ImageProcessor/Processors/Watermark.cs | 2 +- src/ImageProcessor/Properties/AssemblyInfo.cs | 4 +- .../UpgradeLog.htm.REMOVED.git-id | 1 + src/Nuget/ImageProcessor.1.1.0.0.nupkg | Bin 0 -> 25308 bytes src/Nuget/ImageProcessor.Web.1.1.0.0.nupkg | Bin 0 -> 16430 bytes src/Test/Test/Test.csproj | 13 +- 13 files changed, 200 insertions(+), 83 deletions(-) create mode 100644 src/ImageProcessor/Imaging/RotateLayer.cs create mode 100644 src/ImageProcessor/UpgradeLog.htm.REMOVED.git-id create mode 100644 src/Nuget/ImageProcessor.1.1.0.0.nupkg create mode 100644 src/Nuget/ImageProcessor.Web.1.1.0.0.nupkg diff --git a/src/ImageProcessor.Web/Properties/AssemblyInfo.cs b/src/ImageProcessor.Web/Properties/AssemblyInfo.cs index 56fb6e850..d1564391c 100644 --- a/src/ImageProcessor.Web/Properties/AssemblyInfo.cs +++ b/src/ImageProcessor.Web/Properties/AssemblyInfo.cs @@ -31,5 +31,5 @@ using System.Runtime.InteropServices; // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.2.0")] -[assembly: AssemblyFileVersion("1.0.2.0")] +[assembly: AssemblyVersion("1.1.0.0")] +[assembly: AssemblyFileVersion("1.1.0.0")] diff --git a/src/ImageProcessor/ImageFactory.cs b/src/ImageProcessor/ImageFactory.cs index 69b0a7556..69fd0fc91 100644 --- a/src/ImageProcessor/ImageFactory.cs +++ b/src/ImageProcessor/ImageFactory.cs @@ -312,15 +312,33 @@ namespace ImageProcessor /// /// Rotates the current image by the given angle. /// - /// The angle by which to rotate the image. + /// + /// The angle by which to rotate the image. + /// + /// + /// The background Colour. + /// /// /// The current instance of the class. /// - public ImageFactory Rotate(int angle) + public ImageFactory Rotate(int angle, Color backgroundColour = default(Color)) { if (this.ShouldProcess) { - Rotate rotate = new Rotate { DynamicParameter = angle }; + // Sanitize the input. + if (angle > 360 || angle < 0) + { + angle = 0; + } + + RotateLayer rotateLayer = new RotateLayer { Angle = angle }; + + if (backgroundColour != default(Color)) + { + rotateLayer.BackgroundColor = backgroundColour; + } + + Rotate rotate = new Rotate { DynamicParameter = rotateLayer }; this.Image = rotate.ProcessImage(this); } @@ -385,7 +403,7 @@ namespace ImageProcessor // Fix the colour palette of gif images. this.FixGifs(); - if (this.ImageFormat == ImageFormat.Jpeg) + if (object.Equals(this.ImageFormat, ImageFormat.Jpeg)) { // Jpegs can be saved with different settings to include a quality setting for the JPEG compression. // This improves output compression and quality. @@ -418,7 +436,7 @@ namespace ImageProcessor // Fix the colour palette of gif images. this.FixGifs(); - if (this.ImageFormat == ImageFormat.Jpeg) + if (object.Equals(this.ImageFormat, ImageFormat.Jpeg)) { // Jpegs can be saved with different settings to include a quality setting for the JPEG compression. // This improves output compression and quality. @@ -500,7 +518,7 @@ namespace ImageProcessor { // Fix the colour palette of gif images. // TODO: Why does the palette not get fixed when resized to the same dimensions. - if (this.ImageFormat == ImageFormat.Gif) + if (object.Equals(this.ImageFormat, ImageFormat.Gif)) { OctreeQuantizer quantizer = new OctreeQuantizer(255, 8); this.Image = quantizer.Quantize(this.Image); diff --git a/src/ImageProcessor/ImageProcessor.csproj b/src/ImageProcessor/ImageProcessor.csproj index 5eee94bd0..56c0e84a7 100644 --- a/src/ImageProcessor/ImageProcessor.csproj +++ b/src/ImageProcessor/ImageProcessor.csproj @@ -76,6 +76,7 @@ + diff --git a/src/ImageProcessor/ImageProcessor.sln b/src/ImageProcessor/ImageProcessor.sln index 35a90a6e6..a6b3bf630 100644 --- a/src/ImageProcessor/ImageProcessor.sln +++ b/src/ImageProcessor/ImageProcessor.sln @@ -1,6 +1,6 @@  -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImageProcessor", "ImageProcessor.csproj", "{3B5DD734-FB7A-487D-8CE6-55E7AF9AEA7E}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test", "..\Test\Test\Test.csproj", "{30327C08-7574-4D7E-AC95-6A58753C6855}" diff --git a/src/ImageProcessor/Imaging/RotateLayer.cs b/src/ImageProcessor/Imaging/RotateLayer.cs new file mode 100644 index 000000000..80cc52168 --- /dev/null +++ b/src/ImageProcessor/Imaging/RotateLayer.cs @@ -0,0 +1,40 @@ +// ----------------------------------------------------------------------- +// +// TODO: Update copyright text. +// +// ----------------------------------------------------------------------- + +namespace ImageProcessor.Imaging +{ + #region Using + using System.Drawing; + #endregion + + /// + /// Enacapsulates the properties required to rotate an image. + /// + internal class RotateLayer + { + #region Constructors + /// + /// Initializes a new instance of the class. + /// + public RotateLayer() + { + this.BackgroundColor = Color.Transparent; + } + #endregion + + #region Properties + /// + /// Gets or sets the angle at which to rotate the image. + /// + public int Angle { get; set; } + + /// + /// Gets or sets the background color. + /// + public Color BackgroundColor { get; set; } + #endregion + } +} diff --git a/src/ImageProcessor/Processors/Filter.cs b/src/ImageProcessor/Processors/Filter.cs index f1aec4f94..bad5e7552 100644 --- a/src/ImageProcessor/Processors/Filter.cs +++ b/src/ImageProcessor/Processors/Filter.cs @@ -7,18 +7,11 @@ namespace ImageProcessor.Processors { #region Using - - using System; using System.Collections.Generic; using System.Drawing; - using System.Drawing.Drawing2D; using System.Drawing.Imaging; - using System.IO; using System.Text.RegularExpressions; - using System.Web; - using System.Web.Hosting; using ImageProcessor.Imaging.Filters; - #endregion /// @@ -183,8 +176,10 @@ namespace ImageProcessor.Processors break; } - return matrix.ProcessImage(factory, image, newImage); - + if (matrix != null) + { + return matrix.ProcessImage(factory, image, newImage); + } } catch { diff --git a/src/ImageProcessor/Processors/Rotate.cs b/src/ImageProcessor/Processors/Rotate.cs index e8161ef30..560d110f6 100644 --- a/src/ImageProcessor/Processors/Rotate.cs +++ b/src/ImageProcessor/Processors/Rotate.cs @@ -7,13 +7,12 @@ namespace ImageProcessor.Processors { #region Using + using System; using System.Collections.Generic; using System.Drawing; - using System.Drawing.Imaging; - using System.Text.RegularExpressions; - using ImageProcessor.Helpers.Extensions; - using System; using System.Drawing.Drawing2D; + using System.Text.RegularExpressions; + using ImageProcessor.Imaging; #endregion /// @@ -24,24 +23,18 @@ namespace ImageProcessor.Processors /// /// The regular expression to search strings for. /// - //private static readonly Regex QueryRegex = new Regex(@"rotate=-*([1-9][0-7][0-9]|\d{1,2}(?!\d)|180)|rotate=[^&]*", RegexOptions.Compiled); - private static readonly Regex QueryRegex = new Regex(@"rotate=-*([1-2][0-9][0-9]|3[0-5][0-9]|\d{1}(?!\d)|\d{1,2}(?!\d)|360)|rotate=[^&]*", RegexOptions.Compiled); + private static readonly Regex QueryRegex = new Regex(@"rotate=([1-2][0-9][0-9]|3[0-5][0-9]|\d{1}(?!\d)|\d{1,2}(?!\d)|360)|rotate=[^&]*", RegexOptions.Compiled); /// /// The regular expression to search strings for the angle attribute. /// - private static readonly Regex AngleRegex = new Regex(@"rotate=\[-*([1-9][0-7][0-9]|\d{1,2}(?!\d)|180)\]", RegexOptions.Compiled); + private static readonly Regex AngleRegex = new Regex(@"rotate=angle-\[([1-2][0-9][0-9]|3[0-5][0-9]|\d{1}(?!\d)|\d{1,2}(?!\d)|360)\]", RegexOptions.Compiled); /// /// The regular expression to search strings for the color attribute. /// private static readonly Regex ColorRegex = new Regex(@"bgcolor-([0-9a-fA-F]{3}){1,2}", RegexOptions.Compiled); - /// - /// The format of the image to rotate. - /// - private ImageFormat imageFormat; - #region IGraphicsProcessor Members /// /// Gets the name. @@ -127,11 +120,25 @@ namespace ImageProcessor.Processors { // Set the index on the first instance only. this.SortOrder = match.Index; - int degrees; - int.TryParse(match.Value.Split('=')[1], out degrees); + RotateLayer rotateLayer = new RotateLayer(); + + string toParse = match.Value; + + if (toParse.Contains("bgcolor")) + { + rotateLayer.Angle = this.ParseAngle(toParse); + rotateLayer.BackgroundColor = this.ParseColor(toParse); + } + else + { + int degrees; + int.TryParse(match.Value.Split('=')[1], out degrees); + + rotateLayer.Angle = degrees; + } - this.DynamicParameter = degrees; + this.DynamicParameter = rotateLayer; } index += 1; @@ -158,21 +165,20 @@ namespace ImageProcessor.Processors try { - int angle = this.DynamicParameter; + RotateLayer rotateLayer = this.DynamicParameter; + int angle = rotateLayer.Angle; + Color backgroundColor = rotateLayer.BackgroundColor; // Center of the image - float rotateAtX = image.Width / 2; - float rotateAtY = image.Height / 2; - - this.imageFormat = factory.ImageFormat; + float rotateAtX = Math.Abs(image.Width / 2); + float rotateAtY = Math.Abs(image.Height / 2); // Create a rotated image. - newImage = RotateImage(image, rotateAtX, rotateAtY, angle); + newImage = this.RotateImage(image, rotateAtX, rotateAtY, angle, backgroundColor); newImage.Tag = image.Tag; image.Dispose(); image = newImage; - } catch { @@ -186,67 +192,71 @@ namespace ImageProcessor.Processors } #endregion + #region Private Methods /// - /// + /// Rotates an image to the given angle at the given position. /// - /// - /// - /// - /// - /// - /// Based on http://www.codeproject.com/Articles/58815/C-Image-PictureBox-Rotations?msg=4155374#xx4155374xx - private Bitmap RotateImage(Image image, float rotateAtX, float rotateAtY, float angle) + /// The image to rotate + /// The horizontal pixel coordinate at which to rotate the image. + /// The vertical pixel coordinate at which to rotate the image. + /// The angle in degress at which to rotate the image. + /// The background color to fill an image with. + /// The image rotated to the given angle at the given position. + /// + /// Based on http://www.codeproject.com/Articles/58815/C-Image-PictureBox-Rotations?msg=4155374#xx4155374xx + /// + private Bitmap RotateImage(Image image, float rotateAtX, float rotateAtY, float angle, Color backgroundColor) { - int width, height, X, Y; + int width, height, x, y; // Degrees to radians according to Google. - const double degreeToRadian = 0.0174532925; + const double DegreeToRadian = 0.0174532925; - double widthAsDouble = (double)image.Width; - double heightAsDouble = (double)image.Height; + double widthAsDouble = image.Width; + double heightAsDouble = image.Height; // Allow for angles over 180 if (angle > 180) { angle = angle - 360; - } + } - double degrees = Math.Abs(angle); + double degrees = Math.Abs(angle); if (degrees <= 90) { - double radians = degreeToRadian * degrees; + double radians = DegreeToRadian * degrees; double radiansSin = Math.Sin(radians); double radiansCos = Math.Cos(radians); - width = (int)(heightAsDouble * radiansSin + widthAsDouble * radiansCos); - height = (int)(widthAsDouble * radiansSin + heightAsDouble * radiansCos); - X = (width - image.Width) / 2; - Y = (height - image.Height) / 2; + width = (int)((heightAsDouble * radiansSin) + (widthAsDouble * radiansCos)); + height = (int)((widthAsDouble * radiansSin) + (heightAsDouble * radiansCos)); + x = (width - image.Width) / 2; + y = (height - image.Height) / 2; } else { degrees -= 90; - double radians = degreeToRadian * degrees; + double radians = DegreeToRadian * degrees; double radiansSin = Math.Sin(radians); double radiansCos = Math.Cos(radians); - // Fix the 270 bug - if (radiansCos == -1) + // Fix the 270 error + if (Math.Abs(radiansCos - -1.0D) < 0.00001) { - radiansCos = -1 * -1; + radiansCos = 1; } - width = (int)(widthAsDouble * radiansSin + heightAsDouble * radiansCos); - height = (int)(heightAsDouble * radiansSin + widthAsDouble * radiansCos); - X = (width - image.Width) / 2; - Y = (height - image.Height) / 2; + width = (int)((widthAsDouble * radiansSin) + (heightAsDouble * radiansCos)); + height = (int)((heightAsDouble * radiansSin) + (widthAsDouble * radiansCos)); + x = (width - image.Width) / 2; + y = (height - image.Height) / 2; } - //create a new empty bitmap to hold rotated image + // Create a new empty bitmap to hold rotated image Bitmap newImage = new Bitmap(width, height); newImage.SetResolution(image.HorizontalResolution, image.VerticalResolution); - //make a graphics object from the empty bitmap + // Make a graphics object from the empty bitmap using (Graphics graphics = Graphics.FromImage(newImage)) { // Reduce the jagged edge. @@ -257,26 +267,67 @@ namespace ImageProcessor.Processors graphics.PixelOffsetMode = PixelOffsetMode.HighQuality; graphics.CompositingQuality = CompositingQuality.HighSpeed; - // Fill the background TODO: Set a color - if (this.imageFormat == ImageFormat.Jpeg) - { - graphics.Clear(Color.White); - } + // Fill the background. + graphics.Clear(backgroundColor); // Put the rotation point in the "center" of the image - graphics.TranslateTransform(rotateAtX + X, rotateAtY + Y); + graphics.TranslateTransform(rotateAtX + x, rotateAtY + y); // Rotate the image graphics.RotateTransform(angle); // Move the image back - graphics.TranslateTransform(-rotateAtX - X, -rotateAtY - Y); + graphics.TranslateTransform(-rotateAtX - x, -rotateAtY - y); // Draw passed in image onto graphics object - graphics.DrawImage(image, new PointF(0 + X, 0 + Y)); - + graphics.DrawImage(image, new PointF(0 + x, 0 + y)); } + return newImage; } + + /// + /// Returns the correct containing the angle for the given string. + /// + /// + /// The input string containing the value to parse. + /// + /// + /// The correct containing the angle for the given string. + /// + private int ParseAngle(string input) + { + foreach (Match match in AngleRegex.Matches(input)) + { + // Split on angle- + int angle; + int.TryParse(match.Value.Replace("[", string.Empty).Replace("]", string.Empty).Split('-')[1], out angle); + return angle; + } + + // No rotate - matches the RotateLayer default. + return 0; + } + + /// + /// Returns the correct for the given string. + /// + /// + /// The input string containing the value to parse. + /// + /// + /// The correct + /// + private Color ParseColor(string input) + { + foreach (Match match in ColorRegex.Matches(input)) + { + // split on color-hex + return ColorTranslator.FromHtml("#" + match.Value.Split('-')[1]); + } + + return Color.Transparent; + } + #endregion } } diff --git a/src/ImageProcessor/Processors/Watermark.cs b/src/ImageProcessor/Processors/Watermark.cs index 147ee9fe9..8046545ee 100644 --- a/src/ImageProcessor/Processors/Watermark.cs +++ b/src/ImageProcessor/Processors/Watermark.cs @@ -452,7 +452,7 @@ namespace ImageProcessor.Processors /// The input string containing the value to parse. /// /// - /// The correct containing the font family for the given string. + /// The correct containing the opacity for the given string. /// private int ParseOpacity(string input) { diff --git a/src/ImageProcessor/Properties/AssemblyInfo.cs b/src/ImageProcessor/Properties/AssemblyInfo.cs index f783823f2..ecc917a5c 100644 --- a/src/ImageProcessor/Properties/AssemblyInfo.cs +++ b/src/ImageProcessor/Properties/AssemblyInfo.cs @@ -32,6 +32,6 @@ using System.Security; // // You can specify all the values or you can default the Build and Revision Numbers // by using the '*' as shown below: -[assembly: AssemblyVersion("1.0.2.0")] -[assembly: AssemblyFileVersion("1.0.2.0")] +[assembly: AssemblyVersion("1.1.0.0")] +[assembly: AssemblyFileVersion("1.1.0.0")] diff --git a/src/ImageProcessor/UpgradeLog.htm.REMOVED.git-id b/src/ImageProcessor/UpgradeLog.htm.REMOVED.git-id new file mode 100644 index 000000000..9d6aad2d1 --- /dev/null +++ b/src/ImageProcessor/UpgradeLog.htm.REMOVED.git-id @@ -0,0 +1 @@ +41192c06780bda40794dac2731a4105f1efe0311 \ No newline at end of file diff --git a/src/Nuget/ImageProcessor.1.1.0.0.nupkg b/src/Nuget/ImageProcessor.1.1.0.0.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..6113d379b53e1f63d81928da192165fcac53986e GIT binary patch literal 25308 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 K5!Jybd;bp#52D!s literal 0 HcmV?d00001 diff --git a/src/Nuget/ImageProcessor.Web.1.1.0.0.nupkg b/src/Nuget/ImageProcessor.Web.1.1.0.0.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..e759b155a309023cbfe6da2cb6526243a027a083 GIT binary patch literal 16430 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 literal 0 HcmV?d00001 diff --git a/src/Test/Test/Test.csproj b/src/Test/Test/Test.csproj index 45cf111ad..c629e6249 100644 --- a/src/Test/Test/Test.csproj +++ b/src/Test/Test/Test.csproj @@ -1,5 +1,6 @@  + Debug AnyCPU @@ -15,6 +16,11 @@ v4.0 false false + + + + + 4.0 true @@ -149,8 +155,13 @@ + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + - + +