public override ImageInfo GenerateImage(System.Collections.Specialized.NameValueCollection parameters) { //Get the parameters if (String.IsNullOrEmpty(parameters["ImageUrl"])) { throw new ArgumentException("You must supply the ImageUrl parameter"); } string imageUrl = parameters["ImageUrl"]; string imageFile = HttpContext.Current.Server.MapPath(imageUrl); FileInfo fi = new FileInfo(imageFile); if (!fi.Exists) { imageFile = HttpContext.Current.Server.MapPath("~/App_Data/Missing.jpg"); } // Add the resize transform logic (if needed) ImageResizeTransform resizeTrans = new ImageResizeTransform(); if (!String.IsNullOrEmpty(parameters["Width"])) { resizeTrans.Width = Convert.ToInt32(parameters["Width"]); base.ImageTransforms.Add(resizeTrans); } else { resizeTrans.Height = Convert.ToInt32(parameters["Height"]); base.ImageTransforms.Add(resizeTrans); } this.ImageTransforms.Add(resizeTrans); return(new ImageInfo(File.ReadAllBytes(imageFile))); }
public void InterpolationMode_Property() { var transform = new ImageResizeTransform(); Assert.AreEqual(InterpolationMode.HighQualityBicubic, transform.InterpolationMode); transform.InterpolationMode = InterpolationMode.High; Assert.AreEqual(InterpolationMode.High, transform.InterpolationMode); }
private void ProcessImageHelper(int eWidth, int eHeight, ImageResizeTransform transform, Image image) { Image result = transform.ProcessImage(image); Assert.AreEqual(eWidth, result.Width); Assert.AreEqual(eHeight, result.Height); }
public void Mode_Property() { var transform = new ImageResizeTransform(); Assert.AreEqual(ImageResizeMode.Fit, transform.Mode); transform.Mode = ImageResizeMode.Crop; Assert.AreEqual(ImageResizeMode.Crop, transform.Mode); }
public void Height_Property() { var transform = new ImageResizeTransform(); Assert.AreEqual(0, transform.Height); transform.Height = 200; Assert.AreEqual(200, transform.Height); ExceptionHelper.ExpectArgumentOutOfRangeException(delegate() { transform.Height = -10; }, "value", "Specified argument was out of the range of valid values.\r\nParameter name: value"); }
// Add image generation logic here and return an instance of ImageInfo public override ImageInfo GenerateImage(NameValueCollection parameters) { this.SetupCulture(); // which type of image should be generated ? string mode = string.IsNullOrEmpty(parameters["mode"]) ? "profilepic" : parameters["mode"].ToLowerInvariant(); // We need to determine the output format string format = string.IsNullOrEmpty(parameters["format"]) ? "jpg" : parameters["format"].ToLowerInvariant(); // Lets retrieve the color Color color = string.IsNullOrEmpty(parameters["color"]) ? Color.White : (parameters["color"].StartsWith("#") ? ColorTranslator.FromHtml(parameters["color"]) : Color.FromName(parameters["color"])); Color backColor = string.IsNullOrEmpty(parameters["backcolor"]) ? Color.White : (parameters["backcolor"].StartsWith("#") ? ColorTranslator.FromHtml(parameters["backcolor"]) : Color.FromName(parameters["backcolor"])); // Do we have a border ? int border = string.IsNullOrEmpty(parameters["border"]) ? 0 : Convert.ToInt32(parameters["border"]); // Do we have a resizemode defined ? var resizeMode = string.IsNullOrEmpty(parameters["resizemode"]) ? ImageResizeMode.Fit : (ImageResizeMode)Enum.Parse(typeof(ImageResizeMode), parameters["ResizeMode"], true); // Maximum sizes int maxWidth = string.IsNullOrEmpty(parameters["MaxWidth"]) ? 0 : Convert.ToInt32(parameters["MaxWidth"]); int maxHeight = string.IsNullOrEmpty(parameters["MaxHeight"]) ? 0 : Convert.ToInt32(parameters["MaxHeight"]); // Any text ? string text = string.IsNullOrEmpty(parameters["text"]) ? string.Empty : parameters["text"]; // Default Image this._defaultImageFile = string.IsNullOrEmpty(parameters["NoImage"]) ? string.Empty : parameters["NoImage"]; // Do we override caching for this image ? if (!string.IsNullOrEmpty(parameters["NoCache"])) { this.EnableClientCache = false; this.EnableServerCache = false; } try { this.ContentType = GetImageFormat(format); switch (mode) { case "profilepic": int uid; if (!int.TryParse(parameters["userid"], out uid) || uid <= 0) { uid = -1; } var uppTrans = new UserProfilePicTransform { UserID = uid, }; IFileInfo photoFile; this.ContentType = !uppTrans.TryGetPhotoFile(out photoFile) ? ImageFormat.Gif : GetImageFormat(photoFile?.Extension ?? "jpg"); this.ImageTransforms.Add(uppTrans); break; case "placeholder": var placeHolderTrans = new PlaceholderTransform(); int width, height; if (TryParseDimension(parameters["w"], out width)) { placeHolderTrans.Width = width; } if (TryParseDimension(parameters["h"], out height)) { placeHolderTrans.Height = height; } if (!string.IsNullOrEmpty(parameters["Color"])) { placeHolderTrans.Color = color; } if (!string.IsNullOrEmpty(parameters["Text"])) { placeHolderTrans.Text = text; } if (!string.IsNullOrEmpty(parameters["BackColor"])) { placeHolderTrans.BackColor = backColor; } this.ImageTransforms.Add(placeHolderTrans); break; case "securefile": var secureFileTrans = new SecureFileTransform(); if (!string.IsNullOrEmpty(parameters["FileId"])) { var fileId = Convert.ToInt32(parameters["FileId"]); var file = FileManager.Instance.GetFile(fileId); if (file == null) { return(this.GetEmptyImageInfo()); } var folder = FolderManager.Instance.GetFolder(file.FolderId); if (!secureFileTrans.DoesHaveReadFolderPermission(folder)) { return(this.GetEmptyImageInfo()); } this.ContentType = GetImageFormat(file.Extension); secureFileTrans.SecureFile = file; secureFileTrans.EmptyImage = this.EmptyImage; this.ImageTransforms.Add(secureFileTrans); } break; case "file": var imgFile = string.Empty; var imgUrl = string.Empty; // Lets determine the 2 types of Image Source: Single file, file url var filePath = parameters["File"]; if (!string.IsNullOrEmpty(filePath)) { filePath = filePath.Trim(); var fullFilePath = HttpContext.Current.Server.MapPath(filePath); if (!File.Exists(fullFilePath) || !IsAllowedFilePathImage(filePath)) { return(this.GetEmptyImageInfo()); } imgFile = fullFilePath; } else if (!string.IsNullOrEmpty(parameters["Url"])) { var url = parameters["Url"]; // allow only site resources when using the url parameter if (!url.StartsWith("http") || !UriBelongsToSite(new Uri(url))) { return(this.GetEmptyImageInfo()); } imgUrl = url; } if (string.IsNullOrEmpty(parameters["format"])) { string extension; if (string.IsNullOrEmpty(parameters["Url"])) { var fi = new System.IO.FileInfo(imgFile); extension = fi.Extension.ToLowerInvariant(); } else { string[] parts = parameters["Url"].Split('.'); extension = parts[parts.Length - 1].ToLowerInvariant(); } this.ContentType = GetImageFormat(extension); } var imageFileTrans = new ImageFileTransform { ImageFilePath = imgFile, ImageUrl = imgUrl }; this.ImageTransforms.Add(imageFileTrans); break; default: string imageTransformClass = ConfigurationManager.AppSettings["DnnImageHandler." + mode]; string[] imageTransformClassParts = imageTransformClass.Split(','); var asm = Assembly.LoadFrom(Globals.ApplicationMapPath + @"\bin\" + imageTransformClassParts[1].Trim() + ".dll"); var t = asm.GetType(imageTransformClassParts[0].Trim()); var imageTransform = (ImageTransform)Activator.CreateInstance(t); foreach (var key in parameters.AllKeys) { var pi = t.GetProperty(key, BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance); if (pi != null && key != "mode") { switch (key.ToLowerInvariant()) { case "color": pi.SetValue(imageTransform, color, null); break; case "backcolor": pi.SetValue(imageTransform, backColor, null); break; case "border": pi.SetValue(imageTransform, border, null); break; default: switch (pi.PropertyType.Name) { case "Int32": pi.SetValue(imageTransform, Convert.ToInt32(parameters[key]), null); break; case "String": pi.SetValue(imageTransform, parameters[key], null); break; } break; } } } this.ImageTransforms.Add(imageTransform); break; } } catch (Exception ex) { Exceptions.Exceptions.LogException(ex); return(this.GetEmptyImageInfo()); } // Resize-Transformation if (mode != "placeholder") { int width, height; TryParseDimension(parameters["w"], out width); TryParseDimension(parameters["h"], out height); var size = string.IsNullOrEmpty(parameters["size"]) ? string.Empty : parameters["size"]; switch (size) { case "xxs": width = 16; height = 16; break; case "xs": width = 32; height = 32; break; case "s": width = 50; height = 50; break; case "l": width = 64; height = 64; break; case "xl": width = 128; height = 128; break; case "xxl": width = 256; height = 256; break; } if (mode == "profilepic") { resizeMode = ImageResizeMode.FitSquare; if (width > 0 && height > 0 && width != height) { resizeMode = ImageResizeMode.Fill; } } if (width > 0 || height > 0) { var resizeTrans = new ImageResizeTransform { Mode = resizeMode, BackColor = backColor, Width = width, Height = height, MaxWidth = maxWidth, MaxHeight = maxHeight, Border = border, }; this.ImageTransforms.Add(resizeTrans); } } // Gamma adjustment if (!string.IsNullOrEmpty(parameters["Gamma"])) { var gammaTrans = new ImageGammaTransform(); double gamma; if (double.TryParse(parameters["Gamma"], NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out gamma) && gamma >= 0.2 && gamma <= 5) { gammaTrans.Gamma = gamma; this.ImageTransforms.Add(gammaTrans); } } // Brightness adjustment if (!string.IsNullOrEmpty(parameters["Brightness"])) { var brightnessTrans = new ImageBrightnessTransform(); int brightness; if (int.TryParse(parameters["Brightness"], out brightness)) { brightnessTrans.Brightness = brightness; this.ImageTransforms.Add(brightnessTrans); } } // Contrast adjustment if (!string.IsNullOrEmpty(parameters["Contrast"])) { var contrastTrans = new ImageContrastTransform(); double contrast; if (double.TryParse(parameters["Contrast"], NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out contrast) && (contrast >= -100 && contrast <= 100)) { contrastTrans.Contrast = contrast; this.ImageTransforms.Add(contrastTrans); } } // Greyscale if (!string.IsNullOrEmpty(parameters["Greyscale"])) { var greyscaleTrans = new ImageGreyScaleTransform(); this.ImageTransforms.Add(greyscaleTrans); } // Invert if (!string.IsNullOrEmpty(parameters["Invert"])) { var invertTrans = new ImageInvertTransform(); this.ImageTransforms.Add(invertTrans); } // Rotate / Flip if (!string.IsNullOrEmpty(parameters["RotateFlip"])) { var rotateFlipTrans = new ImageRotateFlipTransform(); var rotateFlipType = (RotateFlipType)Enum.Parse(typeof(RotateFlipType), parameters["RotateFlip"]); rotateFlipTrans.RotateFlip = rotateFlipType; this.ImageTransforms.Add(rotateFlipTrans); } // We start the chain with an empty image var dummy = new Bitmap(1, 1); using (var ms = new MemoryStream()) { dummy.Save(ms, this.ContentType); return(new ImageInfo(ms.ToArray())); } }
public override ImageInfo GenerateImage(NameValueCollection parameters) { //Get the parameters string imageFile = HttpContext.Current.Server.MapPath("~/App_Data/Missing.jpg"); if (!String.IsNullOrEmpty(parameters["ImageUrl"])) { string imageUrl = parameters["ImageUrl"]; imageFile = HttpContext.Current.Server.MapPath(imageUrl); } FileInfo fi = new FileInfo(imageFile); if (!fi.Exists) { imageFile = HttpContext.Current.Server.MapPath("~/App_Data/Missing.jpg"); } if (HttpContext.Current.Session != null && HttpContext.Current.Session["picture"] != null) { imageFile = HttpContext.Current.Session["picture"] as string; HttpContext.Current.Session["picture"] = null; } FileStream fs = new FileStream(imageFile, FileMode.Open, FileAccess.Read, FileShare.Read); int fileWidth, fileHeight; using (System.Drawing.Image image = System.Drawing.Image.FromStream(fs)) { fileWidth = image.Width; fileHeight = image.Height; } fs.Close(); // Add the resize transform logic (if needed) ImageResizeTransform resizeTrans = new ImageResizeTransform(); if (fileHeight <= fileWidth) { resizeTrans.Width = Convert.ToInt32(parameters["Width"]); base.ImageTransforms.Add(resizeTrans); } else { resizeTrans.Height = Convert.ToInt32(parameters["Height"]); base.ImageTransforms.Add(resizeTrans); } // Add the watermark transform logic (if needed) if (!string.IsNullOrEmpty(parameters["WatermarkText"])) { ImageWatermarkTransform watermarkTrans = new ImageWatermarkTransform(); watermarkTrans.WatermarkText = parameters["WatermarkText"]; if (!String.IsNullOrEmpty(parameters["WatermarkFontFamily"])) { watermarkTrans.FontFamily = parameters["WatermarkFontFamily"]; } if (!String.IsNullOrEmpty(parameters["WatermarkFontColor"])) { watermarkTrans.FontColor = ColorTranslator.FromHtml(parameters["WatermarkFontColor"]); } if (!String.IsNullOrEmpty(parameters["WatermarkFontSize"])) { watermarkTrans.FontSize = Convert.ToSingle(parameters["WatermarkFontSize"]); } base.ImageTransforms.Add(watermarkTrans); if (!File.Exists(imageFile)) { throw new ArgumentException(String.Format("The file {0} could not be found", imageFile)); } } return(new ImageInfo(File.ReadAllBytes(imageFile))); }