使用英语阅读

通过


如何:设置 JPEG 压缩级别

将映像保存到磁盘时,可能需要修改映像的参数,以尽量减少文件大小或提高其质量。 可以通过修改 JPEG 映像的压缩级别来调整其质量。 若要在保存 JPEG 映像时指定压缩级别,必须创建 EncoderParameters 对象并将其传递给 Image 类的 Save 方法。 初始化 EncoderParameters 对象,使其具有一个由一个 EncoderParameter组成的数组。 创建 EncoderParameter时,请指定 Quality 编码器和所需的压缩级别。

以下示例代码创建一个 EncoderParameter 对象并保存三个 JPEG 图像。 通过修改传递给 EncoderParameter 构造函数的 long 值,每个 JPEG 映像都以不同的质量级别保存。 质量级别 0 对应于最大压缩,质量级别为 100 对应于最小压缩。

C#
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);  
        }  
    }  
C#
private ImageCodecInfo GetEncoder(ImageFormat format)  
{  
    ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();  
    foreach (ImageCodecInfo codec in codecs)  
    {  
        if (codec.FormatID == format.Guid)  
        {  
            return codec;  
        }  
    }  
    return null;  
}  

编译代码

此示例需要:

另请参阅