Пример #1
0
        private ImageFormat GetOutputFormat(ImageRequest request, ItemImageInfo image, List <IImageEnhancer> enhancers)
        {
            if (!string.IsNullOrWhiteSpace(request.Format))
            {
                ImageFormat format;
                if (Enum.TryParse(request.Format, true, out format))
                {
                    return(format);
                }
            }

            var serverFormats = _imageProcessor.GetSupportedImageOutputFormats();

            var clientFormats = GetClientSupportedFormats();

            if (serverFormats.Contains(ImageFormat.Webp) &&
                clientFormats.Contains(ImageFormat.Webp))
            {
                return(ImageFormat.Webp);
            }

            if (enhancers.Count > 0)
            {
                return(ImageFormat.Png);
            }

            if (string.Equals(Path.GetExtension(image.Path), ".jpg", StringComparison.OrdinalIgnoreCase) ||
                string.Equals(Path.GetExtension(image.Path), ".jpeg", StringComparison.OrdinalIgnoreCase))
            {
                return(ImageFormat.Jpg);
            }

            // We can't predict if there will be transparency or not, so play it safe
            return(ImageFormat.Png);
        }
Пример #2
0
        private ImageFormat GetOutputFormat(ImageRequest request, ItemImageInfo image, bool cropwhitespace, List <IImageEnhancer> enhancers)
        {
            if (!string.IsNullOrWhiteSpace(request.Format))
            {
                ImageFormat format;
                if (Enum.TryParse(request.Format, true, out format))
                {
                    return(format);
                }
            }

            var         extension   = Path.GetExtension(image.Path);
            ImageFormat?inputFormat = null;

            if (string.Equals(extension, ".jpg", StringComparison.OrdinalIgnoreCase) ||
                string.Equals(extension, ".jpeg", StringComparison.OrdinalIgnoreCase))
            {
                inputFormat = ImageFormat.Jpg;
            }
            else if (string.Equals(extension, ".png", StringComparison.OrdinalIgnoreCase))
            {
                inputFormat = ImageFormat.Png;
            }

            var clientSupportedFormats = GetClientSupportedFormats();

            if (inputFormat.HasValue && clientSupportedFormats.Contains(inputFormat.Value) && enhancers.Count == 0)
            {
                if ((request.Quality ?? 100) == 100 && !request.Height.HasValue && !request.Width.HasValue &&
                    !request.AddPlayedIndicator && !request.PercentPlayed.HasValue && !request.UnplayedCount.HasValue && string.IsNullOrWhiteSpace(request.BackgroundColor))
                {
                    // TODO: Allow this when specfying max width/height if the value is in range
                    if (!cropwhitespace && !request.MaxHeight.HasValue && !request.MaxWidth.HasValue)
                    {
                        return(inputFormat.Value);
                    }
                }
            }

            var serverFormats = _imageProcessor.GetSupportedImageOutputFormats();

            // Client doesn't care about format, so start with webp if supported
            if (serverFormats.Contains(ImageFormat.Webp) && clientSupportedFormats.Contains(ImageFormat.Webp))
            {
                return(ImageFormat.Webp);
            }

            if (enhancers.Count > 0)
            {
                return(ImageFormat.Png);
            }

            if (inputFormat.HasValue && inputFormat.Value == ImageFormat.Jpg)
            {
                return(ImageFormat.Jpg);
            }

            // We can't predict if there will be transparency or not, so play it safe
            return(ImageFormat.Png);
        }
Пример #3
0
        private List <ImageFormat> GetOutputFormats(ImageRequest request, ItemImageInfo image, bool cropwhitespace, List <IImageEnhancer> enhancers)
        {
            if (!string.IsNullOrWhiteSpace(request.Format))
            {
                ImageFormat format;
                if (Enum.TryParse(request.Format, true, out format))
                {
                    return(new List <ImageFormat> {
                        format
                    });
                }
            }

            var         extension   = Path.GetExtension(image.Path);
            ImageFormat?inputFormat = null;

            if (string.Equals(extension, ".jpg", StringComparison.OrdinalIgnoreCase) ||
                string.Equals(extension, ".jpeg", StringComparison.OrdinalIgnoreCase))
            {
                inputFormat = ImageFormat.Jpg;
            }
            else if (string.Equals(extension, ".png", StringComparison.OrdinalIgnoreCase))
            {
                inputFormat = ImageFormat.Png;
            }

            var clientSupportedFormats = GetClientSupportedFormats();

            var serverFormats = _imageProcessor.GetSupportedImageOutputFormats();
            var outputFormats = new List <ImageFormat>();

            // Client doesn't care about format, so start with webp if supported
            if (serverFormats.Contains(ImageFormat.Webp) && clientSupportedFormats.Contains(ImageFormat.Webp))
            {
                outputFormats.Add(ImageFormat.Webp);
            }

            if (enhancers.Count > 0)
            {
                outputFormats.Add(ImageFormat.Png);
            }

            if (inputFormat.HasValue && inputFormat.Value == ImageFormat.Jpg)
            {
                outputFormats.Add(ImageFormat.Jpg);
            }

            // We can't predict if there will be transparency or not, so play it safe
            outputFormats.Add(ImageFormat.Png);

            return(outputFormats);
        }