// -------------------------------------------------------------------------------------------------------------------- // // Copyright (c) James South. // Licensed under the Apache License, Version 2.0. // // // The image helpers. // // -------------------------------------------------------------------------------------------------------------------- namespace ImageProcessor.Web.Helpers { using System.Text; using System.Text.RegularExpressions; using ImageProcessor.Configuration; using ImageProcessor.Imaging.Formats; /// /// The image helpers. /// public static class ImageHelpers { /// /// The regex pattern. /// private static readonly string RegexPattern = BuildRegexPattern(); /// /// The image format regex. /// private static readonly Regex FormatRegex = new Regex(@"(\.?)(png8|" + RegexPattern + ")", RegexOptions.IgnoreCase | RegexOptions.RightToLeft); /// /// The image format regex for matching the file format at the end of a string. /// private static readonly Regex EndFormatRegex = new Regex(@"(\.)" + RegexPattern + "$", RegexOptions.IgnoreCase | RegexOptions.RightToLeft); /// /// Checks a given string to check whether the value contains a valid image extension. /// /// The string containing the filename to check. /// True the value contains a valid image extension, otherwise false. public static bool IsValidImageExtension(string fileName) { return EndFormatRegex.IsMatch(fileName); } /// /// Returns the correct file extension for the given string input /// /// /// The string to parse. /// /// /// The correct file extension for the given string input if it can find one; otherwise an empty string. /// public static string GetExtension(string input) { Match match = FormatRegex.Match(input); if (match.Success) { // Ah the enigma that is the png file. if (match.Value.ToLowerInvariant().EndsWith("png8")) { return "png"; } return match.Value; } return string.Empty; } /// /// Builds a regular expression from the type, this allows extensibility. /// /// /// The to match matrix filters. /// private static string BuildRegexPattern() { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("("); int counter = 0; foreach (ISupportedImageFormat imageFormat in ImageProcessorBootstrapper.Instance.SupportedImageFormats) { foreach (string fileExtension in imageFormat.FileExtensions) { if (counter == 0) { stringBuilder.Append(fileExtension.ToLowerInvariant()); } else { stringBuilder.AppendFormat("|{0}", fileExtension.ToLowerInvariant()); } } counter++; } stringBuilder.Append(")"); return stringBuilder.ToString(); } } }