diff --git a/src/Umbraco.Core/Media/ImageHelper.cs b/src/Umbraco.Core/Media/ImageHelper.cs index d419f6ffdc..c732b00ee0 100644 --- a/src/Umbraco.Core/Media/ImageHelper.cs +++ b/src/Umbraco.Core/Media/ImageHelper.cs @@ -25,6 +25,15 @@ namespace Umbraco.Core.Media return codec.MimeType; } + /// + /// Creates the thumbnails if the image is larger than all of the specified ones. + /// + /// + /// + /// + /// + /// + /// internal static IEnumerable GenerateMediaThumbnails( IFileSystem fs, string fileName, @@ -32,22 +41,33 @@ namespace Umbraco.Core.Media Image originalImage, IEnumerable additionalThumbSizes) { - // Make default thumbnails - var thumbs = new List - { - Resize(fs, fileName, extension, 100, "thumb", originalImage), - Resize(fs, fileName, extension, 500, "big-thumb", originalImage) - }; - //make custom ones - foreach (var thumb in additionalThumbSizes.Where(x => x > 0).Distinct()) + var result = new List(); + + var allSizes = new List {100, 500}; + allSizes.AddRange(additionalThumbSizes.Where(x => x > 0).Distinct()); + + foreach (var s in allSizes) { - thumbs.Add(Resize(fs, fileName, extension, thumb, string.Format("thumb_{0}", thumb), originalImage)); + if (originalImage.Width >= s && originalImage.Height >= s) + { + result.Add(Resize(fs, fileName, extension, s, "thumb", originalImage)); + } } - return thumbs; + return result; } + /// + /// Performs an image resize + /// + /// + /// + /// + /// + /// + /// + /// private static ResizedImage Resize(IFileSystem fileSystem, string path, string extension, int maxWidthHeight, string fileNameAddition, Image originalImage) { var fileNameThumb = String.IsNullOrEmpty(fileNameAddition) diff --git a/src/Umbraco.Web/Editors/ImagesController.cs b/src/Umbraco.Web/Editors/ImagesController.cs index 080219f943..0089024803 100644 --- a/src/Umbraco.Web/Editors/ImagesController.cs +++ b/src/Umbraco.Web/Editors/ImagesController.cs @@ -100,6 +100,13 @@ namespace Umbraco.Web.Editors return GetResized(imagePath, width, Convert.ToString(width)); } + /// + /// Gets a resized image - if the requested max width is greater than the original image, only the original image will be returned. + /// + /// + /// + /// + /// private HttpResponseMessage GetResized(string imagePath, int width, string suffix) { var mediaFileSystem = FileSystemProviderManager.Current.GetFileSystemProvider(); @@ -121,12 +128,22 @@ namespace Umbraco.Web.Editors if (fileStream.CanSeek) fileStream.Seek(0, 0); using (var originalImage = Image.FromStream(fileStream)) { - ImageHelper.GenerateThumbnail( - originalImage, - width, - fullNewPath, - "jpg", - mediaFileSystem); + //If it is bigger, then do the resize + if (originalImage.Width >= width && originalImage.Height >= width) + { + ImageHelper.GenerateThumbnail( + originalImage, + width, + fullNewPath, + "jpg", + mediaFileSystem); + } + else + { + //just return the original image + fullNewPath = fullOrgPath; + } + } } }