diff --git a/src/Umbraco.Core/IO/UmbracoMediaFile.cs b/src/Umbraco.Core/IO/UmbracoMediaFile.cs
index b8fe310f54..d708fcb804 100644
--- a/src/Umbraco.Core/IO/UmbracoMediaFile.cs
+++ b/src/Umbraco.Core/IO/UmbracoMediaFile.cs
@@ -199,8 +199,8 @@ namespace Umbraco.Core.IO
using (var image = Image.FromStream(fs))
{
var fileNameThumb = string.IsNullOrWhiteSpace(fileNameAddition)
- ? string.Format("{0}_UMBRACOSYSTHUMBNAIL.jpg", Path.Substring(0, Path.LastIndexOf(".", StringComparison.Ordinal)))
- : string.Format("{0}_{1}.jpg", Path.Substring(0, Path.LastIndexOf(".", StringComparison.Ordinal)), fileNameAddition);
+ ? string.Format("{0}_UMBRACOSYSTHUMBNAIL." + Extension, Path.Substring(0, Path.LastIndexOf(".", StringComparison.Ordinal)))
+ : string.Format("{0}_{1}." + Extension, Path.Substring(0, Path.LastIndexOf(".", StringComparison.Ordinal)), fileNameAddition);
var thumbnail = maxWidthHeight == -1
? ImageHelper.GenerateThumbnail(image, width, height, fileNameThumb, Extension, _fs)
diff --git a/src/Umbraco.Core/Media/ImageHelper.cs b/src/Umbraco.Core/Media/ImageHelper.cs
index 5842bb67bb..99fc278e61 100644
--- a/src/Umbraco.Core/Media/ImageHelper.cs
+++ b/src/Umbraco.Core/Media/ImageHelper.cs
@@ -59,7 +59,7 @@ namespace Umbraco.Core.Media
var fileHeight = image.Height;
return new Size(fileWidth, fileHeight);
}
-
+
}
public static string GetMimeType(this Image image)
@@ -79,22 +79,22 @@ namespace Umbraco.Core.Media
///
///
internal static IEnumerable GenerateMediaThumbnails(
- IFileSystem fs,
- string fileName,
- string extension,
+ IFileSystem fs,
+ string fileName,
+ string extension,
Image originalImage,
IEnumerable additionalThumbSizes)
{
var result = new List();
- var allSizesDictionary = new Dictionary {{100,"thumb"}, {500,"big-thumb"}};
-
+ var allSizesDictionary = new Dictionary { { 100, "thumb" }, { 500, "big-thumb" } };
+
//combine the static dictionary with the additional sizes with only unique values
var allSizes = allSizesDictionary.Select(kv => kv.Key)
.Union(additionalThumbSizes.Where(x => x > 0).Distinct());
- var sizesDictionary = allSizes.ToDictionary(s => s, s => allSizesDictionary.ContainsKey(s) ? allSizesDictionary[s]: "");
+ var sizesDictionary = allSizes.ToDictionary(s => s, s => allSizesDictionary.ContainsKey(s) ? allSizesDictionary[s] : "");
foreach (var s in sizesDictionary)
{
@@ -121,9 +121,9 @@ namespace Umbraco.Core.Media
///
private static ResizedImage Resize(IFileSystem fileSystem, string path, string extension, int maxWidthHeight, string fileNameAddition, Image originalImage)
{
- var fileNameThumb = String.IsNullOrEmpty(fileNameAddition)
- ? string.Format("{0}_UMBRACOSYSTHUMBNAIL.jpg", path.Substring(0, path.LastIndexOf(".")))
- : string.Format("{0}_{1}.jpg", path.Substring(0, path.LastIndexOf(".")), fileNameAddition);
+ var fileNameThumb = string.IsNullOrWhiteSpace(fileNameAddition)
+ ? string.Format("{0}_UMBRACOSYSTHUMBNAIL." + extension, path.Substring(0, path.LastIndexOf(".", StringComparison.Ordinal)))
+ : string.Format("{0}_{1}." + extension, path.Substring(0, path.LastIndexOf(".", StringComparison.Ordinal)), fileNameAddition);
var thumb = GenerateThumbnail(
originalImage,
@@ -190,9 +190,9 @@ namespace Umbraco.Core.Media
//use best quality
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
}
-
- g.SmoothingMode = SmoothingMode.HighQuality;
+
+ g.SmoothingMode = SmoothingMode.HighQuality;
g.PixelOffsetMode = PixelOffsetMode.HighQuality;
g.CompositingQuality = CompositingQuality.HighQuality;
@@ -202,10 +202,29 @@ namespace Umbraco.Core.Media
// Copy metadata
var imageEncoders = ImageCodecInfo.GetImageEncoders();
-
- var codec = extension.ToLower() == "png" || extension.ToLower() == "gif"
- ? imageEncoders.Single(t => t.MimeType.Equals("image/png"))
- : imageEncoders.Single(t => t.MimeType.Equals("image/jpeg"));
+ ImageCodecInfo codec;
+ switch (extension.ToLower())
+ {
+ case "png":
+ codec = imageEncoders.Single(t => t.MimeType.Equals("image/png"));
+ break;
+ case "gif":
+ codec = imageEncoders.Single(t => t.MimeType.Equals("image/gif"));
+ break;
+ case "tif":
+ case "tiff":
+ codec = imageEncoders.Single(t => t.MimeType.Equals("image/tiff"));
+ break;
+ case "bmp":
+ codec = imageEncoders.Single(t => t.MimeType.Equals("image/bmp"));
+ break;
+ // TODO: this is dirty, defaulting to jpg but the return value of this thing is used all over the
+ // place so left it here, but it needs to not set a codec if it doesn't know which one to pick
+ // Note: when fixing this: both .jpg and .jpeg should be handled as extensions
+ default:
+ codec = imageEncoders.Single(t => t.MimeType.Equals("image/jpeg"));
+ break;
+ }
// Set compresion ratio to 90%
var ep = new EncoderParameters();
@@ -213,12 +232,14 @@ namespace Umbraco.Core.Media
// Save the new image using the dimensions of the image
var predictableThumbnailName = thumbnailFileName.Replace("UMBRACOSYSTHUMBNAIL", maxWidthHeight.ToString(CultureInfo.InvariantCulture));
+ var predictableThumbnailNameJpg = predictableThumbnailName.Substring(0, predictableThumbnailName.LastIndexOf(".", StringComparison.Ordinal)) + ".jpg";
using (var ms = new MemoryStream())
{
bp.Save(ms, codec, ep);
ms.Seek(0, 0);
fs.AddFile(predictableThumbnailName, ms);
+ fs.AddFile(predictableThumbnailNameJpg, ms);
}
// TODO: Remove this, this is ONLY here for backwards compatibility but it is essentially completely unusable see U4-5385
diff --git a/src/Umbraco.Web.UI/umbraco/plugins/tinymce3/insertImage.aspx b/src/Umbraco.Web.UI/umbraco/plugins/tinymce3/insertImage.aspx
index 6388b243ee..21d18dd7ad 100644
--- a/src/Umbraco.Web.UI/umbraco/plugins/tinymce3/insertImage.aspx
+++ b/src/Umbraco.Web.UI/umbraco/plugins/tinymce3/insertImage.aspx
@@ -133,7 +133,7 @@
//get the thumb of the image
var src = document.forms[0].src.value;
var ext = src.split('.').pop();
- var thumb = src.replace("." + ext, "_thumb.jpg");
+ var thumb = src.replace("." + ext, "_thumb." + ext);
if (src != "") jQuery("#<%=ImageViewer.ClientID%>").UmbracoImageViewerAPI().showImage(thumb);
}
}, 500);
diff --git a/src/Umbraco.Web/Editors/ImagesController.cs b/src/Umbraco.Web/Editors/ImagesController.cs
index 39960317b1..f69f84ca86 100644
--- a/src/Umbraco.Web/Editors/ImagesController.cs
+++ b/src/Umbraco.Web/Editors/ImagesController.cs
@@ -124,7 +124,7 @@ namespace Umbraco.Web.Editors
return Request.CreateResponse(HttpStatusCode.NotFound);
}
- var thumbFilePath = imagePath.TrimEnd(ext) + "_" + suffix + ".jpg";
+ var thumbFilePath = imagePath.TrimEnd(ext) + "_" + suffix + ext;
var fullOrgPath = mediaFileSystem.GetFullPath(mediaFileSystem.GetRelativePath(imagePath));
var fullNewPath = mediaFileSystem.GetFullPath(mediaFileSystem.GetRelativePath(thumbFilePath));
var thumbIsNew = mediaFileSystem.FileExists(fullNewPath) == false;
@@ -148,7 +148,7 @@ namespace Umbraco.Web.Editors
originalImage,
width,
fullNewPath,
- "jpg",
+ ext.Replace(".", ""),
mediaFileSystem);
}
else
@@ -168,7 +168,8 @@ namespace Umbraco.Web.Editors
if (stream.CanSeek) stream.Seek(0, 0);
result.Content = new StreamContent(stream);
result.Headers.Date = mediaFileSystem.GetLastModified(imagePath);
- result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
+ result.Content.Headers.ContentType = new MediaTypeHeaderValue(System.Web.MimeMapping.GetMimeMapping(imagePath));
+
return result;
}
}
diff --git a/src/Umbraco.Web/Media/ThumbnailProviders/ImageThumbnailProvider.cs b/src/Umbraco.Web/Media/ThumbnailProviders/ImageThumbnailProvider.cs
index a2777c0137..6f9b26c79d 100644
--- a/src/Umbraco.Web/Media/ThumbnailProviders/ImageThumbnailProvider.cs
+++ b/src/Umbraco.Web/Media/ThumbnailProviders/ImageThumbnailProvider.cs
@@ -33,7 +33,7 @@ namespace Umbraco.Web.Media.ThumbnailProviders
return false;
// Make sure the thumbnail exists
- var tmpThumbUrl = fileUrl.Replace(ext, "_thumb.jpg");
+ var tmpThumbUrl = fileUrl.Replace(ext, "_thumb" + ext);
try
{
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/Images/ImageViewer.ascx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/Images/ImageViewer.ascx.cs
index eaf2eb5b82..98362dd638 100644
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/Images/ImageViewer.ascx.cs
+++ b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/Images/ImageViewer.ascx.cs
@@ -110,7 +110,7 @@ namespace umbraco.controls.Images
}
string ext = MediaItemPath.Substring(MediaItemPath.LastIndexOf(".") + 1, MediaItemPath.Length - MediaItemPath.LastIndexOf(".") - 1);
- MediaItemThumbnailPath = MediaItemPath.Replace("." + ext, "_thumb.jpg");
+ MediaItemThumbnailPath = MediaItemPath.Replace("." + ext, "_thumb." + ext);
ImageFound = true;
}
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/Images/UploadMediaImage.ascx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/Images/UploadMediaImage.ascx.cs
index 71b32f2b61..24d115c6d6 100644
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/controls/Images/UploadMediaImage.ascx.cs
+++ b/src/Umbraco.Web/umbraco.presentation/umbraco/controls/Images/UploadMediaImage.ascx.cs
@@ -81,7 +81,7 @@ namespace umbraco.controls.Images
//this seems real ugly since we apparently already have the properties above (props)... but this data layer is insane and undecipherable:)
string mainImage = media.getProperty(Constants.Conventions.Media.File).Value.ToString();
string extension = mainImage.Substring(mainImage.LastIndexOf(".") + 1, mainImage.Length - mainImage.LastIndexOf(".") - 1);
- var thumbnail = mainImage.Remove(mainImage.Length - extension.Length - 1, extension.Length + 1) + "_thumb.jpg";
+ var thumbnail = mainImage.Remove(mainImage.Length - extension.Length - 1, extension.Length + 1) + "_thumb." + extension;
string width = media.getProperty(Constants.Conventions.Media.Width).Value.ToString();
string height = media.getProperty(Constants.Conventions.Media.Height).Value.ToString();
int id = media.Id;
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/imageViewer.aspx.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/imageViewer.aspx.cs
index 3a2917f24f..f7f129dbed 100644
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/imageViewer.aspx.cs
+++ b/src/Umbraco.Web/umbraco.presentation/umbraco/dialogs/imageViewer.aspx.cs
@@ -76,7 +76,7 @@ namespace umbraco.dialogs
}
var fileNameOrg = fileName;
var ext = fileNameOrg.Substring(fileNameOrg.LastIndexOf(".") + 1, fileNameOrg.Length - fileNameOrg.LastIndexOf(".") - 1);
- var fileNameThumb = SystemDirectories.Root + fileNameOrg.Replace("." + ext, "_thumb.jpg");
+ var fileNameThumb = SystemDirectories.Root + fileNameOrg.Replace("." + ext, "_thumb." + ext);
image.Controls.Add(new LiteralControl("
"));
}
catch
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/plugins/tinymce3/insertImage.aspx b/src/Umbraco.Web/umbraco.presentation/umbraco/plugins/tinymce3/insertImage.aspx
index 1ae2936713..7c4a878ee5 100644
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/plugins/tinymce3/insertImage.aspx
+++ b/src/Umbraco.Web/umbraco.presentation/umbraco/plugins/tinymce3/insertImage.aspx
@@ -133,7 +133,7 @@
//get the thumb of the image
var src = document.forms[0].src.value;
var ext = src.split('.').pop();
- var thumb = src.replace("." + ext, "_thumb.jpg");
+ var thumb = src.replace("." + ext, "_thumb." + ext);
if (src != "") jQuery("#<%=ImageViewer.ClientID%>").UmbracoImageViewerAPI().showImage(thumb);
}
}, 500);
diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/uQuery/MediaExtensions.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/uQuery/MediaExtensions.cs
index f52100d9c9..42b9cd757b 100644
--- a/src/Umbraco.Web/umbraco.presentation/umbraco/uQuery/MediaExtensions.cs
+++ b/src/Umbraco.Web/umbraco.presentation/umbraco/uQuery/MediaExtensions.cs
@@ -216,7 +216,7 @@ namespace umbraco
if (!string.IsNullOrEmpty(url))
{
var extension = media.GetProperty(Constants.Conventions.Media.Extension);
- return url.Replace(string.Concat(".", extension), "_thumb.jpg", StringComparison.InvariantCultureIgnoreCase);
+ return url.Replace(string.Concat(".", extension), "_thumb." + extension, StringComparison.InvariantCultureIgnoreCase);
}
}
diff --git a/src/umbraco.editorControls/uploadfield/uploadField.cs b/src/umbraco.editorControls/uploadfield/uploadField.cs
index 9e0ac6716f..6f795e1ad9 100644
--- a/src/umbraco.editorControls/uploadfield/uploadField.cs
+++ b/src/umbraco.editorControls/uploadfield/uploadField.cs
@@ -20,16 +20,16 @@ namespace umbraco.editorControls
public class uploadField : HtmlInputFile, IDataEditor
{
private const string Thumbnailext = ".jpg";
- private readonly cms.businesslogic.datatype.FileHandlerData _data;
+ private readonly cms.businesslogic.datatype.FileHandlerData _data;
private readonly string _thumbnails;
private string _text;
- private readonly MediaFileSystem _fs;
+ private readonly MediaFileSystem _fs;
private CustomValidator _customValidator;
public uploadField(IData Data, string ThumbnailSizes)
{
_fs = FileSystemProviderManager.Current.GetFileSystemProvider();
- _data = (cms.businesslogic.datatype.FileHandlerData) Data; //this is always FileHandlerData
+ _data = (cms.businesslogic.datatype.FileHandlerData)Data; //this is always FileHandlerData
_thumbnails = ThumbnailSizes;
}
@@ -40,7 +40,7 @@ namespace umbraco.editorControls
_customValidator = new CustomValidator
{
- EnableClientScript = false,
+ EnableClientScript = false,
Display = ValidatorDisplay.Dynamic,
ErrorMessage = ui.Text("errors", "dissallowedMediaType")
};
@@ -71,8 +71,8 @@ namespace umbraco.editorControls
return "";
if (isEmpty == false)
return PostedFile.FileName;
- return string.IsNullOrEmpty(tempText) == false
- ? tempText
+ return string.IsNullOrEmpty(tempText) == false
+ ? tempText
: "";
}
}
@@ -87,7 +87,7 @@ namespace umbraco.editorControls
//return true if there is no file
if (postedFile == null) return true;
if (postedFile.FileName.IsNullOrWhiteSpace()) return true;
-
+
//now check the file type
var extension = Path.GetExtension(postedFile.FileName).TrimStart(".");
@@ -169,12 +169,12 @@ namespace umbraco.editorControls
{
var content = _data.LoadedContentItem;
- // update extension in UI
- UpdateLabelValue(Constants.Conventions.Media.Extension, "prop_umbracoExtension", Page, content);
+ // update extension in UI
+ UpdateLabelValue(Constants.Conventions.Media.Extension, "prop_umbracoExtension", Page, content);
// update file size in UI
- UpdateLabelValue(Constants.Conventions.Media.Bytes, "prop_umbracoBytes", Page, content);
- UpdateLabelValue(Constants.Conventions.Media.Width, "prop_umbracoWidth", Page, content);
- UpdateLabelValue(Constants.Conventions.Media.Height, "prop_umbracoHeight", Page, content);
+ UpdateLabelValue(Constants.Conventions.Media.Bytes, "prop_umbracoBytes", Page, content);
+ UpdateLabelValue(Constants.Conventions.Media.Width, "prop_umbracoWidth", Page, content);
+ UpdateLabelValue(Constants.Conventions.Media.Height, "prop_umbracoHeight", Page, content);
}
}
@@ -199,8 +199,8 @@ namespace umbraco.editorControls
[Obsolete("This method is now obsolete due to a change in the way that files are handled. If you need to check if a URL for an uploaded file is safe you should implement your own as this method will be removed in a future version", false)]
public string SafeUrl(string url)
{
- return string.IsNullOrEmpty(url) == false
- ? Regex.Replace(url, @"[^a-zA-Z0-9\-\.\/\:]{1}", "_")
+ return string.IsNullOrEmpty(url) == false
+ ? Regex.Replace(url, @"[^a-zA-Z0-9\-\.\/\:]{1}", "_")
: String.Empty;
}
@@ -263,7 +263,7 @@ namespace umbraco.editorControls
}
}
}
-
+
///
/// Render this control to the output parameter specified.
///
@@ -283,17 +283,24 @@ namespace umbraco.editorControls
{
var relativeFilePath = _fs.GetRelativePath(_text);
var ext = relativeFilePath.Substring(relativeFilePath.LastIndexOf(".") + 1, relativeFilePath.Length - relativeFilePath.LastIndexOf(".") - 1);
- var relativeThumbFilePath = relativeFilePath.Replace("." + ext, "_thumb.jpg");
- var hasThumb = false;
+ var relativeThumbFilePath = relativeFilePath.Replace("." + ext, "_thumb." + ext);
+ var hasThumb = false;
try
{
hasThumb = _fs.FileExists(relativeThumbFilePath);
- // 4.8.0 added support for png thumbnails (but for legacy it might have been jpg - hence the check before)
- if (hasThumb == false && (ext == "gif" || ext == "png"))
+
+ // 7.4.0 generates thumbs with the correct file extension, but check for old possible extensions as well
+ if (hasThumb == false)
{
relativeThumbFilePath = relativeFilePath.Replace("." + ext, "_thumb.png");
hasThumb = _fs.FileExists(relativeThumbFilePath);
}
+
+ if (hasThumb == false)
+ {
+ relativeThumbFilePath = relativeFilePath.Replace("." + ext, "_thumb.jpg");
+ hasThumb = _fs.FileExists(relativeThumbFilePath);
+ }
}
catch
{
@@ -302,7 +309,7 @@ namespace umbraco.editorControls
{
var thumb = new Image
{
- ImageUrl = _fs.GetUrl(relativeThumbFilePath),
+ ImageUrl = _fs.GetUrl(relativeThumbFilePath),
BorderStyle = BorderStyle.None
};