resizer net manipulation libreria emgu c# image-manipulation

net - Bmp a jpg/png en C#



net core image processing (8)

¿Hay alguna forma de convertir una imagen bmp a jpg / png sin perder la calidad en C #? Usando la clase de imagen podemos convertir bmp a jpg pero la calidad de la imagen de salida es muy pobre. ¿Podemos obtener el nivel de calidad tan bueno como una imagen convertida a jpg usando photoshop con la más alta calidad?


Parece que tiene un código fuente que podría ayudarte ... Sospecho que echas de menos el parámetro del codificador de calidad < shrug >


Fundamentalmente, no podrá mantener la misma calidad porque jpg es (hasta donde tengo conocimiento) siempre con pérdida incluso con la configuración de calidad más alta posible.

Si la calidad precisa de bit es realmente importante, considere usar png, que tiene algunos modos que no tienen pérdida.


Puedes probar:

Bitmap.InterpolationMode = InterpolationMode.HighQualityBicubic;

y

Bitmap.CompositingQuality = CompositingQuality.HighQuality;

Lo que mantiene la calidad bastante alta, pero no la más alta posible.


var qualityEncoder = Encoder.Quality; var quality = (long)<desired quality>; var ratio = new EncoderParameter(qualityEncoder, quality ); var codecParams = new EncoderParameters(1); codecParams.Param[0] = ratio; var jpegCodecInfo = <one of the codec infos from ImageCodecInfo.GetImageEncoders() with mime type = "image/jpeg">; bmp.Save(fileName, jpegCodecInfo, codecParams); // Save to JPG


Solo quiero decir que JPEG es por naturaleza un formato con pérdida. Entonces, incluso en las configuraciones más altas, perderás algo de información, pero depende mucho de la imagen. Pero png no tiene pérdidas.


Siempre que BitmapExtensions por jestro son geniales, los usé. Sin embargo, me gustaría mostrar la versión corregida: funciona para la clase principal de Image, que es más conveniente, como creo, y proporciona una forma de proporcionar calidad:

public static class ImageExtensions { public static void SaveJpeg(this Image img, string filePath, long quality) { var encoderParameters = new EncoderParameters(1); encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, quality); img.Save(filePath, GetEncoder(ImageFormat.Jpeg), encoderParameters); } public static void SaveJpeg(this Image img, Stream stream, long quality) { var encoderParameters = new EncoderParameters(1); encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, quality); img.Save(stream, GetEncoder(ImageFormat.Jpeg), encoderParameters); } static ImageCodecInfo GetEncoder(ImageFormat format) { ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders(); return codecs.Single(codec => codec.FormatID == format.Guid); } }


public static class BitmapExtensions { public static void SaveJPG100(this Bitmap bmp, string filename) { EncoderParameters encoderParameters = new EncoderParameters(1); encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L); bmp.Save(filename, GetEncoder(ImageFormat.Jpeg), encoderParameters); } public static void SaveJPG100(this Bitmap bmp, Stream stream) { EncoderParameters encoderParameters = new EncoderParameters(1); encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L); bmp.Save(stream, GetEncoder(ImageFormat.Jpeg), encoderParameters); } public static ImageCodecInfo GetEncoder(ImageFormat format) { ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders(); foreach (ImageCodecInfo codec in codecs) { if (codec.FormatID == format.Guid) { return codec; } } return null; } }


Estoy trabajando en una aplicación de informe de gastos, y estoy muy satisfecho con la configuración de calidad predeterminada para JPG (y PNG) al guardar desde un objeto Bitmap.

https://msdn.microsoft.com/en-us/library/9t4syfhh%28v=vs.110%29.aspx

Bitmap finalBitmap = ....; //from disk or whatever finalBitmap.Save(xpsFileName + ".final.jpg", ImageFormat.Jpeg); finalBitmap.Save(xpsFileName + ".final.png", ImageFormat.Png);

Estoy en .NET 4.6 ... tal vez la calidad ha mejorado en posteriores lanzamientos de frameworks.