zoukankan      html  css  js  c++  java
  • C#图片处理之另存为压缩质量可自己控制的JPEG

    C#图片处理之另存为压缩质量可自己控制的JPEG
    2008-12-25 15:20

    ZT From:http://blog.csdn.net/ki1381/archive/2007/02/13/1509107.aspx

    处理图片时常用的过程是:读入图片文件并转化为Bitmap -> 处理此Bitmap的每个点以得到需要的效果 -> 保存新的Bitmap到文件
    使用C#很方便的就可以把多种格式的图片文件读到Bitmap对象中。一句话就够了,常见的格式都支持,诸如JPEG,BMP,PNG等等。

    Bitmap bmp = new Bitmap("文件名");

    然后就是怎么处理这个图片的问题了,与本案无关,pass。

    最后就是保存。JPEG虽然是有损压缩方案,但是它在缩减文件体积和尽可能好的保留原有信息的矛盾上很好的找到了平衡点,所以在很多情况下成为首选的保存方案。

    C#当然不会无视这一点,Bitmap类提供了默认的另存为JPEG的方法:

    bmp.Save("输出文件", System.Drawing.Imaging.ImageFormat.Jpeg);

    这样当然很方便,但有时候更在乎文件体积而有时候更在乎图像质量,是不是有什么办法可以让自己来控制压缩质量呢?

    答案是肯定的,bmp.Save方法中有个重载用到了EncoderParameters参数。我们可以在这个参数中加入自己的控制质量。


            
    /**//// <summary>
            
    /// 保存JPG时用
            
    /// </summary>
            
    /// <param name="mimeType"></param>
            
    /// <returns>得到指定mimeType的ImageCodecInfo</returns>
            private static ImageCodecInfo GetCodecInfo(string mimeType)
            
    ...{
                 ImageCodecInfo[] CodecInfo
    = ImageCodecInfo.GetImageEncoders();
                
    foreach (ImageCodecInfo ici in CodecInfo)
                
    ...{
                    
    if (ici.MimeType == mimeType) return ici;
                 }

                
    return null;
             }



            
    /**//// <summary>
            
    /// 保存为JPEG格式,支持压缩质量选项
            
    /// </summary>
            
    /// <param name="bmp"></param>
            
    /// <param name="FileName"></param>
            
    /// <param name="Qty"></param>
            
    /// <returns></returns>
            public static bool KiSaveAsJPEG(Bitmap bmp, string FileName, int Qty)
            
    ...{
                
    try
                
    ...{
                     EncoderParameter p;
                     EncoderParameters ps;

                     ps
    = new EncoderParameters(1);

                     p
    = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, Qty);
                     ps.Param[
    0] = p;

                     bmp.Save(FileName, GetCodecInfo(
    "image/jpeg"), ps);
                    
                    
    return true;
                 }

                
    catch
                
    ...{
                    
    return false;
                 }


             }


       本人博客的文章大部分来自网络转载,因为时间的关系,没有写明转载出处和作者。所以在些郑重的说明:文章只限交流,版权归作者。谢谢

  • 相关阅读:
    nodeJS从入门到进阶三(MongoDB数据库)
    nodeJS从入门到进阶二(网络部分)
    nodeJS实现简易爬虫
    nodeJS从入门到进阶一(基础部分)
    js节流与防抖函数封装
    React16源码解读:揭秘ReactDOM.render
    React16源码解读:开篇带你搞懂几个面试考点
    TypeScript高级用法详解
    一文搞懂V8引擎的垃圾回收
    JavaScript的内存模型
  • 原文地址:https://www.cnblogs.com/wzg0319/p/1543037.html
Copyright © 2011-2022 走看看