zoukankan      html  css  js  c++  java
  • C#保存图片设置图片质量的方法

    主要用到System.Drawing.Imaging命名空间下的ImageCodecInfo、Encoder、EncoderParameter、EncoderParameters四个类

    实现代码

    代码是来自MSDN上的,自己也是初学,写了些注释。

     1 private void VaryQualityLevel()
     2         {
     3             
     4             Bitmap bmp1 = new Bitmap(@"7.jpg");
     5             ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg);
     6 
     7             //创建一个Endoder对象
     8             System.Drawing.Imaging.Encoder myEncoder =
     9                 System.Drawing.Imaging.Encoder.Quality;
    10 
    11             // 创建一个EncoderParameters对象.
    12             // 一个EncoderParameters对象有一个EncoderParameter数组对象
    13             EncoderParameters myEncoderParameters = new EncoderParameters(1);
    14 
    15             EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder, 50L);//这里的50L用来设置保存时的图片质量
    16             //测试时400多K的图片保存为100多K,图片失真也不是很厉害
    17             myEncoderParameters.Param[0] = myEncoderParameter;
    18             bmp1.Save(@"TestPhotoQualityFifty.jpg", jgpEncoder, myEncoderParameters);
    19 
    20             myEncoderParameter = new EncoderParameter(myEncoder, 100L);//设置为100时,比原图大了几KB。
    21             myEncoderParameters.Param[0] = myEncoderParameter;
    22             bmp1.Save(@"TestPhotoQualityHundred.jpg", jgpEncoder, myEncoderParameters);
    23 
    24             //设置为0是,图片失真
    25             myEncoderParameter = new EncoderParameter(myEncoder, 0L);
    26             myEncoderParameters.Param[0] = myEncoderParameter;
    27             bmp1.Save(@"TestPhotoQualityZero.jpg", jgpEncoder, myEncoderParameters);
    28 
    29         }
    30 
    31 
    32 
    33 
    34 
    35         private ImageCodecInfo GetEncoder(ImageFormat format)
    36         {
    37 
    38             ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
    39 
    40             foreach (ImageCodecInfo codec in codecs)
    41             {
    42                 if (codec.FormatID == format.Guid)
    43                 {
    44                     return codec;
    45                 }
    46             }
    47             return null;
    48         }

    图中7是原图

  • 相关阅读:
    Java 虚拟机部分面试题
    Java 多线程部分面试题
    Java IO部分面试题
    Java 集合框架部分面试题
    Java 面向对象面试题
    Java 多线程同步的五种方法
    Python操作redis
    Python操作mysql
    Python操作mongodb
    数据处理的全过程---(获取数据-清洗数据-数据建模-数据可视化)
  • 原文地址:https://www.cnblogs.com/zhaotianff/p/5570321.html
Copyright © 2011-2022 走看看