zoukankan      html  css  js  c++  java
  • (开发篇) 图片/图表研究~ .net图片档案系列~图片质量和参数修改(附压缩图片代码)

    1.问题说明

      一般情况下,存储图片只需要使用BitMap.Save(string Path,ImageFormat)函数即可,但是默认的jpeg保存质量应该是在60左右.如果默认值不能满足我们的需求,那么就需要根据实际需求修改图片的保存质量.

    2.解决方案

      ImageCodecInfo类指定需要保存的格式(如jpg等等).

      System.Drawing.Imaging.Encoder类用于定制图片需要呈现的方式和各种参数,例如图片质量参数(Quality),扫描方法参数,色度表参数,压缩参数(Compression),颜色深度(ColorDepth)等等,该类型是EncoderParameter(构造函数)的参数之一.

      EncoderParameter用于存放所有关于当前图片的修改,一种修改(即一个不同的Encoder)存放入一个EncoderParameter,最后汇总到EncoderParameters中.就Encoder.Quality而言,Quality 类别指定图像的压缩级别。 在用于构造 EncoderParameter 时,质量类别的有用值范围为从 0 到 100。 指定的数值越低,压缩越高,因此图像的质量越低。 值为 0 时,图像的质量最差;值为 100 时,图像的质量最佳.

      EncoderParameters则是EncoderParameter类的集合数组,是 BitMap.Save(String, ImageCodecInfo, EncoderParameters) 的参数之一.

      方法:对System.Drawing.Imaging.Encoder设置,然后通过System.Drawing.Imaging.Encoder构造出来EncoderParameter类,将EncoderParameter传递给EncoderParameters数组,从而得到一个完全符合自己意愿的图片!

    附压缩图片源代码

     1 #region 压缩图片
    2
    3 /// <summary>
    4 /// 压缩图片
    5 /// </summary>
    6 /// <param name="filePath">要压缩的图片的路径</param>
    7 /// <param name="filePath_wy">压缩后的图片的路径</param>
    8 public void WYang(string filePath, string filePath_wy)
    9 {
    10 //Bitmap
    11 Bitmap bmp = null;
    12
    13 //ImageCoderInfo
    14 ImageCodecInfo ImageCoderType = null;
    15
    16 //Encoder
    17 System.Drawing.Imaging.Encoder ImageEncoder = null;
    18
    19 //EncoderParameter
    20 EncoderParameter ep = null;
    21
    22 //EncoderParameters
    23 EncoderParameters epArray = null;
    24
    25 try
    26 {
    27 bmp = new Bitmap(filePath);
    28
    29 ImageCoderType = this.getImageCoderInfo("image/jpeg");
    30
    31 ImageEncoder = System.Drawing.Imaging.Encoder.Quality;
    32
    33 epArray = new EncoderParameters(1);
    34
    35 ep = new EncoderParameter(ImageEncoder, 10L);
    36 epArray.Param[0] = ep;
    37 bmp.Save(filePath_wy, ImageCoderType, epArray);
    38 }
    39 catch (Exception ex)
    40 {
    41 throw new Exception(ex.Message);
    42 }
    43 finally
    44 {
    45 bmp.Dispose();//释放资源
    46
    47 ep.Dispose();
    48
    49 epArray.Dispose();
    50 }
    51 }
    52
    53 /// <summary>
    54 /// 获取图片编码类型信息
    55 /// </summary>
    56 /// <param name="ImageCoderType">编码类型</param>
    57 /// <returns>ImageCodecInfo</returns>
    58 private ImageCodecInfo getImageCoderInfo(string ImageCoderType)
    59 {
    60 ImageCodecInfo[] coderTypeArray = ImageCodecInfo.GetImageEncoders();
    61
    62 foreach (ImageCodecInfo coderType in coderTypeArray)
    63 {
    64 if (coderType.MimeType.Equals(ImageCoderType))
    65 return coderType;
    66 }
    67 return null;
    68 }
    69
    70 #endregion 压缩图片

    ♣ getImageCoderInfo方法感觉比较简单,就不做过多的解释了,如果需要,再说呗~

    再附图片效果比较

  • 相关阅读:
    【Sqoop】介绍、安装、使用(列出MySQL中数据库/表 + mysql数据导入到Hive表 + Hive表数据导出到mysql表)
    【异常】MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persist on di
    【异常】Flume启动卡主异常:Agent configuration for 'a2' does not contain any valid channels. Marking it as invalid.
    【异常】转载 kafka.common.MessageSizeTooLargeException
    【异常】转载 ERROR KafkaProducer
    【异常】转载 如何优雅地关闭kafka
    【异常】转载 KAFKA生产者数据丢失问题的排查
    【异常】java.lang.ClassCastException: org.apache.spark.rdd.ShuffledRDD cannot be cast to org.apache.spark.streaming.kafka010.HasOffsetRanges
    mmap
    链表
  • 原文地址:https://www.cnblogs.com/phoenixfling/p/2428975.html
Copyright © 2011-2022 走看看