次の方法で共有


方法: JPEG 圧縮レベルを設定する

イメージをディスクに保存するときにイメージのパラメーターを変更して、ファイル サイズを最小限に抑えたり、品質を向上させたりすることができます。 JPEG イメージの圧縮レベルを変更することで、JPEG イメージの品質を調整できます。 JPEG イメージを保存するときに圧縮レベルを指定するには、EncoderParameters オブジェクトを作成し、Save クラスの Image メソッドに渡す必要があります。 1 つのEncoderParametersで構成される配列が含まれるように、EncoderParameter オブジェクトを初期化します。 EncoderParameterを作成するときは、Quality エンコーダーと目的の圧縮レベルを指定します。

次のコード例では、 EncoderParameter オブジェクトを作成し、3 つの JPEG 画像を保存します。 各 JPEG イメージは、long コンストラクターに渡されるEncoderParameter値を変更することで、異なる品質レベルで保存されます。 品質レベル 0 は最大の圧縮に対応し、品質レベル 100 は最小圧縮に対応します。

private void VaryQualityLevel()
    {
        // Get a bitmap. The using statement ensures objects
        // are automatically disposed from memory after use.
        using (Bitmap bmp1 = new Bitmap(@"C:\TestPhoto.jpg"))
        {
            ImageCodecInfo jpgEncoder = 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", jpgEncoder, myEncoderParameters);

            myEncoderParameter = new EncoderParameter(myEncoder, 100L);
            myEncoderParameters.Param[0] = myEncoderParameter;
            bmp1.Save(@"C:\TestPhotoQualityHundred.jpg", jpgEncoder, 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", jpgEncoder, myEncoderParameters);
        }
    }
Private Sub VaryQualityLevel()
    ' Get a bitmap. The Using statement ensures objects
    ' are automatically disposed from memory after use.
    Using bmp1 As New Bitmap("C:\TestPhoto.jpg")
        Dim jpgEncoder 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, 50L)
        myEncoderParameters.Param(0) = myEncoderParameter
        bmp1.Save("c:\TestPhotoQualityFifty.jpg", jpgEncoder, myEncoderParameters)

        myEncoderParameter = New EncoderParameter(myEncoder, 100L)
        myEncoderParameters.Param(0) = myEncoderParameter
        bmp1.Save("C:\TestPhotoQualityHundred.jpg", jpgEncoder, 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", jpgEncoder, myEncoderParameters)
    End Using
End Sub
private ImageCodecInfo GetEncoder(ImageFormat format)
{
    ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
    foreach (ImageCodecInfo codec in codecs)
    {
        if (codec.FormatID == format.Guid)
        {
            return codec;
        }
    }
    return null;
}
Private Function GetEncoder(ByVal format As ImageFormat) As ImageCodecInfo

    Dim codecs As ImageCodecInfo() = ImageCodecInfo.GetImageEncoders()
    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

コードのコンパイル

この例では、次のものが必要です。

  • Windows フォーム アプリケーション。

  • PaintEventArgs。これはPaintEventHandlerのパラメーターです。

  • TestPhoto.jpgという名前で c:\ にあるイメージ ファイル。

こちらも参照ください