Freigeben über


Gewusst wie: Festlegen der JPEG-Komprimierungsebene

Aktualisiert: November 2007

Möglicherweise möchten Sie die Parameter eines Bildes ändern, wenn Sie das Bild auf einem Datenträger speichern, um dadurch die Dateigröße zu minimieren oder die Qualität zu verbessern. Sie können die Qualität eines JPEG-Bildes anpassen, indem Sie dessen Komprimierungsebene ändern. Um die Komprimierungsebene beim Speichern eines JPEG-Bildes anzugeben, müssen Sie ein EncoderParameters-Objekt erstellen und es an die Save-Methode der Image-Klasse übergeben. Initialisieren Sie das EncoderParameters-Objekt, sodass es ein aus einem EncoderParameter bestehendes Array aufweist. Wenn Sie den EncoderParameter erstellen, geben Sie den Quality-Encoder und die gewünschte Komprimierungsebene an.

Beispiel

Im folgenden Beispielcode werden ein EncoderParameter-Objekt erstellt und drei JPEG-Bilder gespeichert. Jedes JPEG-Bild wird mit einer anderen Qualitätsstufe gespeichert, indem der an den EncoderParameter-Konstruktor übergebene long-Wert geändert wird. Die Qualitätsstufe 0 steht für die höchste und die Qualitätsstufe 100 für die niedrigste Komprimierung.

Private Sub VaryQualityLevel()
    ' Get a bitmap.
    Dim bmp1 As New Bitmap("c:\TestPhoto.jpg")
    Dim jgpEncoder As ImageCodecInfo = GetEncoder(ImageFormat.Jpeg)

    ' Create an Encoder object based on the GUID
    ' for the Quality parameter category.
    Dim myEncoder As System.Drawing.Imaging.Encoder = 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.
    Dim myEncoderParameters As New EncoderParameters(1)

    Dim myEncoderParameter As New EncoderParameter(myEncoder, 50&)
    myEncoderParameters.Param(0) = myEncoderParameter
    bmp1.Save("c:\TestPhotoQualityFifty.jpg", jgpEncoder, myEncoderParameters)

    myEncoderParameter = New EncoderParameter(myEncoder, 100&)
    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, 0&)
    myEncoderParameters.Param(0) = myEncoderParameter
    bmp1.Save("c:\TestPhotoQualityZero.jpg", jgpEncoder, myEncoderParameters)

End Sub 'VaryQualityLevel



...


Private Function GetEncoder(ByVal format As ImageFormat) As ImageCodecInfo

    Dim codecs As ImageCodecInfo() = ImageCodecInfo.GetImageDecoders()

    Dim codec As ImageCodecInfo
    For Each codec In codecs
        If codec.FormatID = format.Guid Then
            Return codec
        End If
    Next codec
    Return Nothing

End Function
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;
}

Kompilieren des Codes

Für dieses Beispiel benötigen Sie:

  • Eine Windows Forms-Anwendung

  • PaintEventArgs, ein Parameter von PaintEventHandler.

  • Eine Bilddatei mit dem Namen TestPhoto.jpg, die unter c:\ gespeichert ist.

Siehe auch

Aufgaben

Gewusst wie: Ermitteln der von einem Encoder unterstützten Parameter

Konzepte

Bitmaptypen

Weitere Ressourcen

Verwenden von Bildencodern und -decodern in Managed GDI+