Ejemplo n.º 1
0
        public static IServiceCollection AddMaImage(this IServiceCollection services, Action <ImageProcessSettings> config)
        {
            ImageProcessSettings ims = new ImageProcessSettings();

            config.Invoke(ims);
            services.AddSingleton <IImageProcessSettings>(ims);
            return(services.AddScoped <IImageProcess, ImageProcess>());
        }
Ejemplo n.º 2
0
        public void Process(IFormFile file, FileStream outStream, Action <IImageProcessSettings> settings)
        {
            IImageProcessSettings currentSettings = new ImageProcessSettings()
            {
                DestImageSize     = _settings.DestImageSize,
                EncodeQuality     = _settings.EncodeQuality,
                UseWatermark      = _settings.UseWatermark,
                EncodeSample      = _settings.EncodeSample,
                WatermarkFullPath = _settings.WatermarkFullPath,
                WatermarkUrl      = _settings.WatermarkUrl
            };

            settings.Invoke(currentSettings);

            if (currentSettings.UseWatermark)
            {
                currentSettings.SetUrl(_hostingEnvironment.WebRootPath);
            }

            Image watermark = null;

            if (currentSettings.UseWatermark)
            {
                watermark = Image.Load(currentSettings.WatermarkFullPath);
            }

            var inStream = file.OpenReadStream();

            using (var image = Image.Load(inStream, out IImageFormat format))
            {
                Action <IImageProcessingContext> processAction = (i) =>
                {
                    i.Resize(new ResizeOptions()
                    {
                        Mode    = ResizeMode.Max,
                        Compand = true,
                        Size    = new SixLabors.Primitives.Size(currentSettings.DestImageSize.Width, currentSettings.DestImageSize.Height)
                    });
                    if (currentSettings.UseWatermark)
                    {
                        i.DrawWatermark(watermark, image, currentSettings.DestImageSize.Width, currentSettings.DestImageSize.Height);
                    }
                };
                image.Mutate(processAction);
                image.Save(outStream,
                           new JpegEncoder()
                {
                    Quality   = currentSettings.EncodeQuality,
                    Subsample = ((JpegSubsample)(int)currentSettings.EncodeSample)
                });
            }
        }