示例#1
0
        public Task <Stream> TransformImage(Stream image, ImageDisParameters param)
        {
            var newImage = new MemoryStream();

            using (var imageFactory = new ImageFactory(preserveExifData: false))
            {
                var chain = imageFactory.Load(image);

                if (param.Has("w") || param.Has("h"))
                {
                    var resizeLayer = new ResizeLayer(new Size(param.Get <int>("w"), param.Get <int>("h")));
                    resizeLayer.ResizeMode     = ResizeMode.Max;
                    resizeLayer.AnchorPosition = AnchorPosition.Center;

                    if (param.Has("pad") && param.Get <bool>("pad"))
                    {
                        resizeLayer.ResizeMode = ResizeMode.Pad;
                    }

                    chain.Resize(resizeLayer);
                }

                chain.Save(newImage);
            }

            return(Task.FromResult <Stream>(newImage));
        }
示例#2
0
        public IEnumerable <string> GetParameterAsParts(ImageDisParameters param)
        {
            if (param.Has("w") && param.Has("h"))
            {
                yield return(param.Get <int>("w") + "x" + param.Get <int>("h"));
            }
            else if (param.Has("w"))
            {
                yield return(param.Get <int>("w") + "w");
            }
            else if (param.Has("h"))
            {
                yield return(param.Get <int>("h") + "h");
            }

            if (param.Has("pad") && param.Get <bool>("pad"))
            {
                yield return("padded");
            }
        }
示例#3
0
        private async Task GetImage(HttpContext context)
        {
            // extract the key
            var match = _getImageRegex.Match(context.Request.Path.ToString());
            var key   = match.Groups[1].Value;

            // check if it even exists
            if (!await _options.StorageProvider.CheckIfKeyExists(key))
            {
                context.Response.NotFound();
                return;
            }

            // parse the params
            var param = new ImageDisParameters().AppendParameters(context.Request.Query);
            var parts = _options.ImageTransformProvider.GetParameterAsParts(param);

            // check if the new key exists (or if no param parts were added to the end, the original)
            var newKey = key;

            if (parts.Any())
            {
                newKey = newKey + "_" + string.Join("_", parts);
            }

            if (newKey == key || await _options.StorageProvider.CheckIfKeyExists(newKey))
            {
                context.Response.Redirect(await _options.StorageProvider.GetRedirectPath(newKey));
                return;
            }

            // apply transformations, save to storage and redirect user
            var original = await _options.StorageProvider.GetFile(key, _options);

            var newFile = await _options.ImageTransformProvider.TransformImage(original.Stream, param);

            await _options.StorageProvider.SaveFile(newKey, original.ContentType, newFile, _options);

            context.Response.Redirect(await _options.StorageProvider.GetRedirectPath(newKey));
        }
示例#4
0
        public static ImageDisParameters AppendParameters(this ImageDisParameters param, IReadableStringCollection query)
        {
            foreach (var q in query)
            {
                int  integer;
                bool boolean;

                if (int.TryParse(q.Value.First(), out integer))
                {
                    param.Add(q.Key, integer);
                }
                else if (bool.TryParse(q.Value.First(), out boolean))
                {
                    param.Add(q.Key, boolean);
                }
                else
                {
                    param.Add(q.Key, q.Value.First());
                }
            }

            return(param);
        }