Пример #1
0
        /// <summary>
        ///     The get image format.
        /// </summary>
        /// <param name="parameters">
        ///     The parameters.
        /// </param>
        /// <returns>
        /// </returns>
        private static ImageFormat GetImageFormat(IImageParameters parameters)
        {
            if (parameters.Parameters.ContainsKey("format"))
            {
                string imageTypeParameter = parameters.Parameters["format"];
                if (!string.IsNullOrEmpty(imageTypeParameter))
                {
                    switch (imageTypeParameter.ToLowerInvariant())
                    {
                    case "png":
                        return(ImageFormat.Png);

                    case "gif":
                        return(ImageFormat.Gif);

                    case "jpg":
                        return(ImageFormat.Jpeg);

                    case "tif":
                        return(ImageFormat.Tiff);
                    }
                }
            }

            return(ImageFormat.Jpeg);
        }
Пример #2
0
        /// <summary>
        ///     The process.
        /// </summary>
        /// <param name="parameters">
        ///     The parameters.
        /// </param>
        /// <param name="context">
        ///     The context.
        /// </param>
        /// <param name="bitmap">
        ///     The bitmap.
        /// </param>
        /// <returns>
        ///     The process.
        /// </returns>
        public bool Process(IImageParameters parameters, HttpContext context, ref Bitmap bitmap)
        {
            if (parameters.Parameters.ContainsKey("watermark"))
            {
                string watermarkParameter = parameters["watermark"];
                if (string.IsNullOrEmpty(watermarkParameter))
                {
                    return(false);
                }

                float fontSize = 15;
                if (!string.IsNullOrEmpty(parameters["watermark_fontsize"]))
                {
                    fontSize = (float)Convert.ToDouble(parameters["watermark_fontsize"]);
                }

                int alpha = 20;
                if (!string.IsNullOrEmpty(parameters["watermark_opacity"]))
                {
                    alpha = Convert.ToInt32(parameters["watermark_opacity"]);
                }

                Color color = Color.White;
                if (!string.IsNullOrEmpty(parameters["watermark_color"]))
                {
                    color = Color.FromName(parameters["watermark_color"]);
                }

                IImageTool imageTool = Factory.GetImageTool();
                bitmap = imageTool.Watermark(bitmap, watermarkParameter, fontSize, alpha, color);
                return(true);
            }

            return(false);
        }
Пример #3
0
        /// <summary>
        ///     Retrieve or update cache, and write to output stream
        /// </summary>
        /// <param name="context">
        /// </param>
        /// <exception cref="ApplicationException">
        ///     Unable to determine image parameter provider
        /// </exception>
        public void ProcessRequest(HttpContext context)
        {
            IImageParameters parameters = Factory.GetImageParameters();

            if (parameters == null)
            {
                throw new ApplicationException("Unable to determine image parameter provider");
            }

            // add query string to the parameters...
            parameters.AddCollection(context);

            if (string.IsNullOrEmpty(parameters.ImageSrc))
            {
                // parameters aren't assigned...
                return;
            }

            // add file updated parameter if available...
            Factory.GetImageProvider().AddImageLastUpdatedParameter(parameters);

            string key = parameters.Key;

            string eTag = string.Format(@"""{0}""", key);

            if (CheckETag(context, eTag))
            {
                return;
            }

            ImageFormat imageFormat = GetImageFormat(parameters);

            byte[] imageData = s_ImageStore.GetImageData(key);
            if (imageData.IsNull())
            {
                imageData = this.GetImageData(parameters, context, imageFormat);
                if (imageData.IsNull())
                {
                    return;
                }

                s_ImageStore.PutImageData(key, imageData);
            }

            context.Response.Cache.SetCacheability(HttpCacheability.Public);
            context.Response.Cache.SetETag(eTag);
            context.Response.Cache.SetExpires(DateTime.Now.AddYears(1));
            context.Response.ContentType = "image/" + imageFormat.ToString().ToLower();
            context.Response.OutputStream.Write(imageData, 0, imageData.Length);
        }
        private string GetMappedFileFromParams(IImageParameters parameters)
        {
            if (string.IsNullOrEmpty(parameters.GetImageSrc()))
            {
                return null;
            }

            if (FileSystemHelpers.FileExists(parameters.GetImageSrc()))
            {
                return parameters.GetImageSrc();
            }

            string filePath = HostingEnvironment.MapPath(parameters.GetImageSrc());

            return FileSystemHelpers.FileExists(filePath) ? filePath : null;
        }
        public void AddImageLastUpdatedParameter(IImageParameters parameters)
        {
            string fileName = this.GetMappedFileFromParams(parameters);

            if (!string.IsNullOrEmpty(fileName))
            {
                DateTime fileUpdated = File.GetLastWriteTimeUtc(fileName);

                if (parameters.Parameters.ContainsKey(ImageLastUpdatedKey))
                {
                    parameters.Parameters.Remove(ImageLastUpdatedKey);
                }

                parameters.Parameters.Add(ImageLastUpdatedKey, fileUpdated.ToString());
            }
        }
        /// <summary>
        ///     The get image last updated.
        /// </summary>
        /// <param name="parameters">
        ///     The parameters.
        /// </param>
        public void AddImageLastUpdatedParameter(IImageParameters parameters)
        {
            string fileName = this.GetMappedFileFromParams(parameters);

            if (!string.IsNullOrEmpty(fileName))
            {
                DateTime fileUpdated = File.GetLastWriteTimeUtc(fileName);

                if (parameters.Parameters.ContainsKey(ImageLastUpdatedKey))
                {
                    parameters.Parameters.Remove(ImageLastUpdatedKey);
                }

                parameters.Parameters.Add(ImageLastUpdatedKey, fileUpdated.ToString());
            }
        }
        /// <summary>
        ///     The get mapped file from params.
        /// </summary>
        /// <param name="parameters">
        ///     The parameters.
        /// </param>
        /// <returns>
        ///     The get mapped file from params.
        /// </returns>
        private string GetMappedFileFromParams(IImageParameters parameters)
        {
            if (string.IsNullOrEmpty(parameters.ImageSrc))
            {
                return(null);
            }

            if (FileSystemHelpers.FileExists(parameters.ImageSrc))
            {
                return(parameters.ImageSrc);
            }

            string filePath = HostingEnvironment.MapPath(parameters.ImageSrc);

            return(FileSystemHelpers.FileExists(filePath) ? filePath : null);
        }
        /// <summary>
        ///     The process.
        /// </summary>
        /// <param name="parameters">
        ///     The parameters.
        /// </param>
        /// <param name="context">
        ///     The context.
        /// </param>
        /// <param name="bitmap">
        ///     The bitmap.
        /// </param>
        /// <returns>
        ///     The process.
        /// </returns>
        public bool Process(IImageParameters parameters, HttpContext context, ref Bitmap bitmap)
        {
            if (parameters.Parameters.ContainsKey("rotate"))
            {
                string rotateParameter = parameters.Parameters["rotate"];

                float angle;
                if (float.TryParse(rotateParameter, NumberStyles.Float, CultureInfo.InvariantCulture, out angle))
                {
                    IImageTool imageTool = Factory.GetImageTool();
                    bitmap = imageTool.Rotate(bitmap, angle);
                    return(true);
                }
            }

            return(false);
        }
Пример #9
0
        /// <summary>
        /// The process.
        /// </summary>
        /// <param name="parameters">
        /// The parameters.
        /// </param>
        /// <param name="context">
        /// The context.
        /// </param>
        /// <param name="bitmap">
        /// The bitmap.
        /// </param>
        /// <returns>
        /// The process.
        /// </returns>
        public bool Process(IImageParameters parameters, HttpContext context, ref Bitmap bitmap)
        {
            if (parameters.Parameters.ContainsKey("greyscale"))
            {
                string greyScaleParameter = parameters.Parameters["greyscale"];
                if (string.IsNullOrEmpty(greyScaleParameter))
                {
                    return(false);
                }

                IImageTool imageTool = Factory.GetImageTool();
                bitmap = imageTool.ToGreyScale(bitmap);
                return(true);
            }

            return(false);
        }
        /// <summary>
        /// The process.
        /// </summary>
        /// <param name="parameters">
        /// The parameters.
        /// </param>
        /// <param name="context">
        /// The context.
        /// </param>
        /// <param name="bitmap">
        /// The bitmap.
        /// </param>
        /// <returns>
        /// The process.
        /// </returns>
        public bool Process(IImageParameters parameters, HttpContext context, ref Bitmap bitmap)
        {
            if (parameters.Parameters.ContainsKey("zoom"))
            {
                string zoomParameter = parameters.Parameters["zoom"];

                float zoomFactor;
                if (float.TryParse(zoomParameter, NumberStyles.Float, CultureInfo.InvariantCulture, out zoomFactor))
                {
                    IImageTool imageTool = Factory.GetImageTool();
                    bitmap = imageTool.Zoom(bitmap, zoomFactor);
                    return(true);
                }
            }

            return(false);
        }
Пример #11
0
        /// <summary>
        ///     Takes care of resizeing image from url parameters
        /// </summary>
        /// <param name="parameters">
        ///     The parameters.
        /// </param>
        /// <param name="context">
        /// </param>
        /// <param name="imageFormat">
        /// </param>
        /// <returns>
        /// </returns>
        private byte[] GetImageData(IImageParameters parameters, HttpContext context, ImageFormat imageFormat)
        {
            IImageProvider provider = Factory.GetImageProvider();

            if (provider.IsNull())
            {
                throw new ApplicationException("Unable to determine image provider");
            }

            byte[] data = provider.GetImageData(parameters);
            if (data.IsNull())
            {
                return(null);
            }

            using (var sourceImageData = new MemoryStream(data))
            {
                var outputImg = (Bitmap)Image.FromStream(sourceImageData);
                foreach (IImageFilter imageFilter in this.m_ImageFilters)
                {
                    Bitmap oldOutputImage = outputImg;

                    bool modified = imageFilter.Process(parameters, context, ref outputImg);
                    if (modified)
                    {
                        // Dispose old bitmap
                        oldOutputImage.Dispose();
                    }
                }

                using (outputImg)
                {
                    // Encode image
                    return(s_ImageTool.Encode(outputImg, imageFormat));
                }
            }
        }
        /// <summary>
        ///     The process.
        /// </summary>
        /// <param name="parameters">
        ///     The parameters.
        /// </param>
        /// <param name="context">
        ///     The context.
        /// </param>
        /// <param name="bitmap">
        ///     The bitmap.
        /// </param>
        /// <returns>
        ///     The process.
        /// </returns>
        public bool Process(IImageParameters parameters, HttpContext context, ref Bitmap bitmap)
        {
            if (parameters.Parameters.ContainsKey("width") || parameters.Parameters.ContainsKey("height"))
            {
                string widthParameter  = parameters.Parameters.ContainsKey("width") ? parameters.Parameters["width"] : string.Empty;
                string heightParameter = parameters.Parameters.ContainsKey("height")
                                                                ? parameters.Parameters["height"]
                                                                : string.Empty;

                int imageResizeWidth  = 0;
                int imageResizeHeight = 0;

                // Preserve aspect only if either width or height is specified, not both.
                if (!string.IsNullOrEmpty(widthParameter))
                {
                    int width;
                    if (int.TryParse(widthParameter, out width))
                    {
                        imageResizeWidth = width;
                    }
                }

                if (!string.IsNullOrEmpty(heightParameter))
                {
                    int height;
                    if (int.TryParse(heightParameter, out height))
                    {
                        imageResizeHeight = height;
                    }
                }

                if (imageResizeWidth == 0 && imageResizeHeight == 0)
                {
                    imageResizeWidth  = bitmap.Width;
                    imageResizeHeight = bitmap.Height;
                }

                bool constrainImageSize = true;
                if (!string.IsNullOrEmpty(parameters["resize_constrain"]))
                {
                    bool.TryParse(parameters["resize_constrain"], out constrainImageSize);
                }

                bool keepSquare = false;
                if (!string.IsNullOrEmpty(parameters["resize_square"]))
                {
                    bool.TryParse(parameters["resize_square"], out keepSquare);
                }

                Color bgColor = Color.White;
                if (!string.IsNullOrEmpty(parameters["resize_bgcolor"]))
                {
                    bgColor = Color.FromName(parameters["resize_bgcolor"]);
                }

                IImageTool imageTool = Factory.GetImageTool();
                bitmap = imageTool.Resize(bitmap, imageResizeWidth, imageResizeHeight, constrainImageSize, keepSquare, bgColor);
                return(true);
            }

            return(false);
        }
        /// <summary>
        ///     Takes care of resizing image from url parameters
        /// </summary>
        /// <param name="parameters">
        ///     The parameters.
        /// </param>
        /// <param name="context">
        /// </param>
        /// <param name="imageFormat">
        /// </param>
        /// <returns>
        /// </returns>
        private byte[] GetImageData(IImageParameters parameters, HttpContext context, ImageFormat imageFormat)
        {
            IImageProvider provider = Factory.GetImageProvider();
            if (provider == null)
            {
                throw new ApplicationException("Unable to determine image provider");
            }

            var data = provider.GetImageData(parameters);
            if (data == null)
            {
                return null;
            }

            Bitmap outputImg = null;

            try
            {
                using (var sourceImageData = new MemoryStream(data)) outputImg = (Bitmap)Image.FromStream(sourceImageData);

                foreach (var imageFilter in this.ImageFilters.OrderBy(s => s.Order))
                {
                    Bitmap oldOutputImage = outputImg;
                    bool modified = imageFilter.Process(parameters, context, ref outputImg);
                    if (modified)
                    {
                        // Dispose old bitmap
                        try
                        {
                            oldOutputImage.Dispose();
                        }
                        catch (ObjectDisposedException)
                        {
                        }
                    }
                }

                // Encode image
                return _imageTool.Encode(outputImg, imageFormat);
            }
            finally
            {
                if (outputImg != null)
                {
                    try
                    {
                        outputImg.Dispose();
                    }
                    catch (ObjectDisposedException)
                    {
                    }
                }
            }
        }
        public byte[] GetImageData(IImageParameters parameters)
        {
            string fileName = this.GetMappedFileFromParams(parameters);

            return string.IsNullOrEmpty(fileName) ? null : File.ReadAllBytes(fileName);
        }
        /// <summary>
        ///     The get image data.
        /// </summary>
        /// <param name="parameters">
        ///     The parameters.
        /// </param>
        /// <returns>
        /// </returns>
        public byte[] GetImageData(IImageParameters parameters)
        {
            string fileName = this.GetMappedFileFromParams(parameters);

            return(string.IsNullOrEmpty(fileName) ? null : File.ReadAllBytes(fileName));
        }