コード例 #1
0
        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)));
        }
コード例 #2
0
        public void InterpolationMode_Property() {
            var transform = new ImageResizeTransform();
            Assert.AreEqual(InterpolationMode.HighQualityBicubic, transform.InterpolationMode);

            transform.InterpolationMode = InterpolationMode.High;
            Assert.AreEqual(InterpolationMode.High, transform.InterpolationMode);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        public void Mode_Property() {
            var transform = new ImageResizeTransform();
            Assert.AreEqual(ImageResizeMode.Fit, transform.Mode);

            transform.Mode = ImageResizeMode.Crop;
            Assert.AreEqual(ImageResizeMode.Crop, transform.Mode);
        }
コード例 #5
0
        public void InterpolationMode_Property()
        {
            var transform = new ImageResizeTransform();

            Assert.AreEqual(InterpolationMode.HighQualityBicubic, transform.InterpolationMode);

            transform.InterpolationMode = InterpolationMode.High;
            Assert.AreEqual(InterpolationMode.High, transform.InterpolationMode);
        }
コード例 #6
0
        public void Mode_Property()
        {
            var transform = new ImageResizeTransform();

            Assert.AreEqual(ImageResizeMode.Fit, transform.Mode);

            transform.Mode = ImageResizeMode.Crop;
            Assert.AreEqual(ImageResizeMode.Crop, transform.Mode);
        }
コード例 #7
0
        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");
        }
コード例 #8
0
        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");
        }
コード例 #9
0
        // 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()));
            }
        }
コード例 #10
0
        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)));
        }
コード例 #11
0
 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);
 }