Exemple #1
0
        public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
        {
            if (!ImageWidth.HasValue && !ImageHeight.HasValue && String.IsNullOrEmpty(ImageProfile))
            {
                return;
            }

            var imgSrc = output.Attributes["src"]?.Value.ToString() ?? Src;

            if (string.IsNullOrEmpty(imgSrc))
            {
                return;
            }

            IDictionary <string, string> queryStringParams = null;

            if (!String.IsNullOrEmpty(ImageProfile))
            {
                queryStringParams = await _mediaProfileService.GetMediaProfileCommands(ImageProfile);
            }

            var resizedSrc = ImageSharpUrlFormatter.GetImageResizeUrl(imgSrc, queryStringParams, ImageWidth, ImageHeight, ResizeMode, ImageQuality, ImageFormat, ImageAnchor, ImageBackgroundColor);

            if (_mediaOptions.UseTokenizedQueryString)
            {
                resizedSrc = _mediaTokenService.AddTokenToPath(resizedSrc);
            }

            output.Attributes.SetAttribute("src", resizedSrc);
        }
        public async ValueTask <FluidValue> ProcessAsync(FluidValue input, FilterArguments arguments, LiquidTemplateContext context)
        {
            var url = input.ToStringValue();

            IDictionary <string, string> queryStringParams = null;

            // Profile is a named argument only.
            var profile = arguments["profile"];

            if (!profile.IsNil())
            {
                queryStringParams = await _mediaProfileService.GetMediaProfileCommands(profile.ToStringValue());

                // Additional commands to a profile must be named.
                var width   = arguments["width"];
                var height  = arguments["height"];
                var mode    = arguments["mode"];
                var quality = arguments["quality"];
                var format  = arguments["format"];
                var anchor  = arguments["anchor"];
                var bgcolor = arguments["bgcolor"];

                ApplyQueryStringParams(queryStringParams, width, height, mode, quality, format, anchor, bgcolor);
            }
            else
            {
                queryStringParams = new Dictionary <string, string>();

                var useNamed = arguments.Names.Any(); // Never mix named and indexed arguments as this leads to unpredictable results

                var width   = useNamed ? arguments["width"] : arguments.At(0);
                var height  = useNamed ? arguments["height"] : arguments.At(1);
                var mode    = useNamed ? arguments["mode"] : arguments.At(2);
                var quality = useNamed ? arguments["quality"] : arguments.At(3);
                var format  = useNamed ? arguments["format"] : arguments.At(4);
                var anchor  = useNamed ? arguments["anchor"] : arguments.At(5);
                var bgcolor = useNamed ? arguments["bgcolor"] : arguments.At(6);

                ApplyQueryStringParams(queryStringParams, width, height, mode, quality, format, anchor, bgcolor);
            }

            var resizedUrl = QueryHelpers.AddQueryString(url, queryStringParams);


            if (_options.UseTokenizedQueryString)
            {
                resizedUrl = _mediaTokenService.AddTokenToPath(resizedUrl);
            }

            return(new StringValue(resizedUrl));
        }