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>()); }
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) }); } }