Bilder mit JPEG beliebig komprimieren in C#

Heute zeige ich euch, wie man Bilder mit Hilfe des JPEG-Codecs beliebig komprimieren kann. Beliebig heißt in unserem Fall, dass ihr die Qualitätsstufe festlegen könnt, die das Bild trotz des Komprimierens beibehalten soll. Da die Funktion, die ich euch dafür geschrieben habe relativ kurz ist, denke ich, dass die Kommentare im Quelltext ausreichen sollten. Und nun viel Spaß damit!

private void JpegBildKomprimieren(Image quellBild, int qualitaet, string speicherPfad)
{
    try
    {
        //Ein ImageCodecInfo-Objekt für den JPEG-Codec anlegen
        ImageCodecInfo jpegCodec = null;

        //Den Qualitätsarameter konfigurieren (Qualitätsfaktor in
        //Prozent angeben)
        EncoderParameter qualitaetsParameter = new EncoderParameter(
                    System.Drawing.Imaging.Encoder.Quality, qualitaet);

        //Alle im System verfügbaren Codecs auflisten
        ImageCodecInfo[] alleCodecs = ImageCodecInfo.GetImageEncoders();

        EncoderParameters codecParameter = new EncoderParameters(1);
        codecParameter.Param[0] = qualitaetsParameter;

        //Den JPEG-Codec unter allen Codecs finden und dem
        //Codec-Info-Objekt zuweisen
        for (int i = 0; i < alleCodecs.Length; i++)
        {
             if (alleCodecs[i].MimeType == "image/jpeg")
             {
                    jpegCodec = alleCodecs[i];
                    break;
             }
        }

        //Das Bild abspeichern
        quellBild.Save(speicherPfad, jpegCodec, codecParameter);
   }
   catch (Exception e)
   {
        throw e;
   }
}

//Snippet von www.code-bude.net

Aufgerufen werden kann die Funktion zum Beispiel wie folgt:

JpegBildKomprimieren(Image.FromFile(Application.StartupPath + "\\bild.jpg"),
                             30, Application.StartupPath + "\\klein.jpg");
//Snippet von www.code-bude.net

Solltet ihr noch Fragen oder Probleme haben, so schreibt mir einfach einen Kommentar.
Viele Grüße,
Raffi

AvatarÜber den Autor: Dieser Artikel, sowie 368 andere Artikel auf code-bude.net, wurden von Raffael geschrieben. – Seit 2011 blogge ich hier über Programmierung, meine Software, schreibe Tutorials und versuche mein Wissen, so gut es geht, mit meinen Lesern zu teilen. Zudem schreibe ich auf derwirtschaftsinformatiker.de über Themen meines Studiums.  //    •  • Facebook  • Twitter


2 Kommentare

  1. Avatar
    Christinesays:

    Deine Methode klappt wirklich super! Allerdings kann ich die quellbild.Save-Methode bei dem, was ich machen muss, nicht verwenden. Am liebsten hätte ich, dass aus der Komprimierungsmethode das komprimierte Bild zurückgegeben wird. Ist das irgendwie möglich?

    • Wieso kannst du die .Save()-Methode nicht nutzen? Geht es nicht oder willst du es nicht, da du keine Datei auf der Festplatte anlegen willst? Wenn es letzteres ist, dann kannst du das Bild auch einfach in einen MemoryStream statt in eine Datei schreiben. Siehe Beispiel hier: https://stackoverflow.com/a/7629892/251719

Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Sie dient nur dem Spamschutz.