I need to convert the following code based on System.Drawing to use ImageSharp. The method saves a JPG image.
internal static void SaveToJpg(MemoryStream ms, string fileName)
{
using (var image = System.Drawing.Image.FromStream(ms))
{
EncoderParameters myEncoderParameters = new EncoderParameters(3);
ImageCodecInfo ici = null;
// Use codec for better quality.
myEncoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
myEncoderParameters.Param[1] = new EncoderParameter(System.Drawing.Imaging.Encoder.ScanMethod, (int) EncoderValue.ScanMethodInterlaced);
myEncoderParameters.Param[2] = new EncoderParameter(System.Drawing.Imaging.Encoder.RenderMethod, (int) EncoderValue.RenderProgressive);
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.MimeType == "image/jpeg")
ici = codec;
}
try
{
image.Save(fileName, ici, myEncoderParameters);
}
finally
{
for (int i = 0; i < myEncoderParameters.Param.Length; i++)
{
myEncoderParameters.Param[i].Dispose();
}
myEncoderParameters.Dispose();
}
}
}
Are there any options to set the same parameters in ImageSharp? I've only found the JpegEncoder.Quality property, but the output image has a worse quality compared with the one saved with System.Drawing
internal static void SaveToJpg(MemoryStream ms, string fileName)
{
using (var image = SixLabors.ImageSharp.Image.Load<SixLabors.ImageSharp.PixelFormats.Rgba32>(ms))
{
JpegEncoder jp = new JpegEncoder() { Quality = 100 };
image.SaveAsJpeg(fileName, jp);
}
}