Potrzebuję uzyskać zdjęcie od użytkownika, z różnymi rozszerzeniami formatu, i chcę je zawsze zapisać jako "jpg", dla łatwej obsługi. jest dobry sposób to zrobić w C# bez uzbrojenia jakości?C# Konwertuj formaty obrazów na jpg
Odpowiedz
Od: http://msdn.microsoft.com/en-us/library/system.drawing.imaging.encoderparameter.aspx
private void VaryQualityLevel()
{
// Get a bitmap.
Bitmap bmp1 = new Bitmap(@"c:\TestPhoto.jpg");
ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg);
// Create an Encoder object based on the GUID
// for the Quality parameter category.
System.Drawing.Imaging.Encoder myEncoder =
System.Drawing.Imaging.Encoder.Quality;
// Create an EncoderParameters object.
// An EncoderParameters object has an array of EncoderParameter
// objects. In this case, there is only one
// EncoderParameter object in the array.
EncoderParameters myEncoderParameters = new EncoderParameters(1);
EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder,
50L);
myEncoderParameters.Param[0] = myEncoderParameter;
bmp1.Save(@"c:\TestPhotoQualityFifty.jpg", jgpEncoder,
myEncoderParameters);
myEncoderParameter = new EncoderParameter(myEncoder, 100L);
myEncoderParameters.Param[0] = myEncoderParameter;
bmp1.Save(@"c:\TestPhotoQualityHundred.jpg", jgpEncoder,
myEncoderParameters);
// Save the bitmap as a JPG file with zero quality level compression.
myEncoderParameter = new EncoderParameter(myEncoder, 0L);
myEncoderParameters.Param[0] = myEncoderParameter;
bmp1.Save(@"c:\TestPhotoQualityZero.jpg", jgpEncoder,
myEncoderParameters);
}
...
private ImageCodecInfo GetEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
Doskonała dziękuję –
Above kod nie działa dla mnie. Nie jest w stanie znaleźć klasy ImageCodecInfo, –
to działa. btw Co robi @symbol w @ c: \ TestPhotoQualityZero.jpg oznacza –
Możesz użyć Image APIs do stworzenia obrazu w pamięci, a następnie utrzymywania go w JPG. http://msdn.microsoft.com/en-us/library/ms142147.aspx
systemu Windows GDI + zapewnia Image class i Bitmap class do przechowywania obrazów w pamięci i manipuluje obrazów w pamięci. GDI + zapisuje obrazy do plików dyskowych za pomocą enkoderów obrazu i ładuje obrazy z plików dyskowych przy pomocy dekoderów obrazu.
Sprawdź przeciążenia Image.Save Method w celu wdrożenia funkcjonalności. obsługujące różne formaty obrazów typu ImageFormat Class.
za przykładem na Image.Save Method (String, ImageCodecInfo, EncoderParameters), który pozwoli Ci zaoszczędzić Jpg
plik z kodowaniem itp kodu
fragmencie:
using System;
using System.Drawing;
using System.Drawing.Imaging;
class Example_SetJPEGQuality
{
public static void Main()
{
Bitmap myBitmap;
ImageCodecInfo myImageCodecInfo;
Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
// Create a Bitmap object based on a BMP file.
myBitmap = new Bitmap("Shapes.bmp");
// Get an ImageCodecInfo object that represents the JPEG codec.
myImageCodecInfo = GetEncoderInfo("image/jpeg");
// Create an Encoder object based on the GUID
// for the Quality parameter category.
myEncoder = Encoder.Quality;
// Create an EncoderParameters object.
// An EncoderParameters object has an array of EncoderParameter
// objects. In this case, there is only one
// EncoderParameter object in the array.
myEncoderParameters = new EncoderParameters(1);
// Save the bitmap as a JPEG file with quality level 25.
myEncoderParameter = new EncoderParameter(myEncoder, 25L);
myEncoderParameters.Param[0] = myEncoderParameter;
myBitmap.Save("Shapes025.jpg", myImageCodecInfo, myEncoderParameters);
// Save the bitmap as a JPEG file with quality level 50.
myEncoderParameter = new EncoderParameter(myEncoder, 50L);
myEncoderParameters.Param[0] = myEncoderParameter;
myBitmap.Save("Shapes050.jpg", myImageCodecInfo, myEncoderParameters);
// Save the bitmap as a JPEG file with quality level 75.
myEncoderParameter = new EncoderParameter(myEncoder, 75L);
myEncoderParameters.Param[0] = myEncoderParameter;
myBitmap.Save("Shapes075.jpg", myImageCodecInfo, myEncoderParameters);
}
// Codec informacji
private static ImageCodecInfo GetEncoderInfo(String mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for(j = 0; j < encoders.Length; ++j)
{
if(encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
}
Nadzieja to pomaga ..
Używam tego prostego rozszerzenia aby przekonwertować strumień, wszystko, co robi, to go przekonwertować i nie robi nic dla jakości.
public static Stream ConvertImage(this Stream originalStream, ImageFormat format)
{
var image = Image.FromStream(originalStream);
var stream = new MemoryStream();
image.Save(stream, format);
stream.Position = 0;
return stream;
}
Wykorzystanie:
var outputStream = gifStream.ConvertImage(ImageFormat.Png);
jest to najłatwiejsze rozwiązanie tego problemu. większość programistów po prostu go pomija: 3 – iceDragon
Spróbuj tego:
public static class BitmapExtension
{
public static void Save(this Bitmap bitmap, String fileName, ImageFormat imageFormat, long quality = 75L)
{
using (var encoderParameters = new EncoderParameters(1))
using (encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality))
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
bitmap.Save(fileName, codecs.Single(codec => codec.FormatID == imageFormat.Guid), encoderParameters);
}
}
}
...
Bitmap bitmap = new Bitmap("myImage.bmp");
bitmap.Save("myImage.jpg", ImageFormat.Jpeg, 50L);
- 1. Konwertuj wszystkie obrazy na jpg
- 2. Konwertuj tiff na format jpg
- 3. Konwertuj tiff na jpg w php?
- 4. Wykryj Eof dla obrazów JPG
- 5. XSLT: Konwertuj dane base64 na pliki obrazów
- 6. Zmień nazwę zestawu obrazów PNG z rozszerzeniem ".jpg" na ".png"
- 7. Konwertuj C# na PHP
- 8. Jakie są obsługiwane formaty plików obrazów do wyświetlenia na telefonie iPhone?
- 9. C#: Zapisywanie JPG w częściach
- 10. Skalowanie JPG podczas dekompresji JPG
- 11. Eksportuj plik PDF do JPG w C#
- 12. html do jpg z C#
- 13. C++: Konwertuj wchar_t * na BSTR?
- 14. Konwertuj tablicę na ciąg? C#
- 15. C Konwertuj char na char *
- 16. Formaty obsługiwane przez BitmapFactory.decodeByteArray (...)
- 17. Przedwczesne EOF podczas odczytywania wyjątku JPG podczas zapisywania obrazów JPG do formatu pdf przy użyciu itext
- 18. Konwertuj .psd i .ai do PNG/JPG z obrazkiem
- 19. Konwertuj obraz na XAML?
- 20. Przesyłanie JPG, ale nie jpg
- 21. Konwertuj mapę bitową na PNG w pamięci w C++ (win32)
- 22. Jakie formaty obrazu są obsługiwane przez CANVAS w html5?
- 23. Formaty plików obsługiwane przez UIWebView
- 24. Jakość zapisanego pliku JPG w języku C#
- 25. Konwertuj Go [] bajt na C * char
- 26. Konwertuj krótki [2] na Int32 w C#
- 27. Konwertuj int na tablicę bajtów w C?
- 28. Konwertuj z binarnego na char w C
- 29. Konwertuj obiekt XmlDocument na obiekt XmlNode - C#?
- 30. .NET/C# - Konwertuj char [] na ciąg
To zależy od platformy - Web, aplikacji mobilnej lub nawet jeśli yout wziąć kartę fotograficzną :) –