public static ConvertionOptions FromResizeRequest(ResizeRequestModel requestModel) { var options = new ConvertionOptions { Name = requestModel.Name }; if (requestModel.Width.HasValue && requestModel.Width > 0) { options.Width = Math.Min(requestModel.Width.Value, ConvertionOptions.MaxSize); } if (requestModel.Height.HasValue && requestModel.Height > 0) { options.Height = Math.Min(requestModel.Height.Value, ConvertionOptions.MaxSize); } options.TargetFormat = GetMagickFormat(requestModel.Format); if (requestModel.Quality.HasValue && requestModel.Quality.Value >= 1 && requestModel.Quality.Value <= 100) { options.Quality = requestModel.Quality.Value; } else { options.Quality = options.TargetFormat == MagickFormat.Png24 ? 100 : 82; } return(options); }
public async Task <byte[]> Convert(byte[] source, ConvertionOptions options) { switch (options.TargetFormat) { case MagickFormat.Png24: return(await ConvertToPng(source, options)); default: return(await ConvertToJpg(source, options)); } }
Task <byte[]> ConvertToJpg(byte[] source, ConvertionOptions options) => Execute(source, $"- -filter Triangle -define filter:support=2 -resize {options.Width}x{options.Height}> -unsharp 0.25x0.25+8+0.065 -dither None -posterize 136 -quality {options.Quality} -define jpeg:fancy-upsampling=off -interlace none -colorspace sRGB -background white -alpha remove -strip jpg:-");
Task <byte[]> ConvertToPng(byte[] source, ConvertionOptions options) => Execute(source, $"- -filter Triangle -define filter:support=2 -resize {options.Width}x{options.Height}> -density 150x150 -unsharp 0.25x0.25+8+0.065 -dither None -posterize 136 -define png:compression-level=9 -define png:compression-strategy=1 -define png:exclude-chunk=all -interlace none -colorspace sRGB -strip png:-");