Ho bisogno di ottenere una foto dall'utente, con diverse estensioni di formato, e voglio sempre salvarla come "jpg", per una facile gestione. c'è un buon modo di farlo in C# senza armare la qualità?C# converte i formati immagine in jpg
risposta
Da: 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;
}
Excelent grazie –
Sopra il codice non sembra funzionare per me. Non è in grado di trovare la classe ImageCodecInfo, –
funziona .. btw Che cosa fa @symbol in @c: \ TestPhotoQualityZero.jpg significa –
È possibile utilizzare le API immagine per creare un'immagine in memoria, quindi mantenerla in JPG. http://msdn.microsoft.com/en-us/library/ms142147.aspx
di Windows GDI + fornisce la Image class e la Bitmap class per la memorizzazione immagini nella memoria e la manipolazione di immagini in memoria. GDI + scrive le immagini su file disco con l'aiuto di codificatori di immagini e carica le immagini dai file di dischi con l'aiuto dei decodificatori di immagine.
Verificare i sovraccarichi Image.Save Method per implementare le funzionalità. che supportano vari formati di immagine di tipo ImageFormat Class.
seguire l'esempio su Image.Save Method (String, ImageCodecInfo, EncoderParameters), che vi permetterà di salvare Jpg
file con la codifica ecc
frammento di codice:
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 informazioni
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;
}
}
Spero che questo aiuto ..
Io uso questa semplice estensione per convertire un flusso, tutto ciò che fa è convertirlo e non fa nulla per la qualità.
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;
}
utilizzo:
var outputStream = gifStream.ConvertImage(ImageFormat.Png);
questa è la soluzione più semplice per questo problema. la maggior parte degli sviluppatori lo omettono semplicemente: 3 – iceDragon
Prova questo:
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. Visualizzazione immagine jpg Qt
- 2. Come convertire i file SVG in altri formati di immagine
- 3. immagine per NumPy-array: JPG vs PNG
- 4. Unisci SVG e .JPG in un'unica immagine?
- 5. salva i file di immagine in C#
- 6. Quali formati di immagine sono supportati da CANVAS in html5?
- 7. PyQt4 jpeg/jpg formato immagine non supportato
- 8. Formati immagine SVG PySide non trovati?
- 9. Esporta PDF in JPG (s) in C#
- 10. come sapere questa immagine è jpg o png iphone
- 11. C# converte i dati dell'immagine in byte array
- 12. Qualità di un JPG salvato in C#
- 13. Programma che converte html in immagine
- 14. ImageMagick non converte i file JPEG
- 15. Impostazione del filtro su OpenFileDialog per consentire i tipici formati di immagine?
- 16. immagine Circa Android e patrimoniale formati
- 17. JPG Immagine non visualizzata in JSP del progetto Web dinamico
- 18. Quali sono i formati di file immagine supportati per la visualizzazione su iPhone?
- 19. Immagine salvata in JavaFX come jpg rosa modificato
- 20. conversione da emf a jpg
- 21. C++: converte wchar_t * in BSTR?
- 22. html a jpg con C#
- 23. LLVM converte i metodi Objective-C in funzioni inline?
- 24. Convertitore da JPG a PDF in C#
- 25. converte stringa in argv in C++
- 26. Perché è necessaria molta conversione tra i formati di immagine necessari? (UIImage, CGImage, CIImage)
- 27. Downscaling JPG durante decompressione JPG
- 28. Come posso convertire tra i formati di immagine RGB565 e RGB24 in MATLAB?
- 29. C++: converte il vettore in tupla
- 30. C++ converte char in const char *
Dipende su piattaforma - web, applicazioni, mobili o anche se yout prendono carta di foto :) –