博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#图片处理之: 另存为压缩质量可自己控制的JPEG
阅读量:6001 次
发布时间:2019-06-20

本文共 1449 字,大约阅读时间需要 4 分钟。

处理图片时常用的过程是:读入图片文件并转化为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;

            }


        }

本文转自94cool博客园博客,原文链接:http://www.cnblogs.com/94cool/archive/2010/12/31/1923080.html,如需转载请自行联系原作者
你可能感兴趣的文章
穷举法解决旅行商问题
查看>>
Go语言标准库之JSON编解码
查看>>
winpcap 发送数据包
查看>>
cisco 出现 %Error opening tftp://255.255.255.255 错误解决办法
查看>>
VIM编辑器
查看>>
IE主页被篡改 地址框变灰
查看>>
linux上架设l2tp+ipsec ***服务器
查看>>
Facebook和用户界面会如何扭曲你说的话
查看>>
Android 单元测试用法 简介
查看>>
安卓混合开发之Cordova,NativeWebView两种实现
查看>>
git设置socks代理
查看>>
桶排序
查看>>
石化数字化交付
查看>>
ACER一键恢复系统联想到的备份还原方案
查看>>
如何用windows Live writer 撰写blog
查看>>
RHEL6入门系列之十九,硬盘分区与格式化
查看>>
Ajax在java前台中怎么运用
查看>>
Linux下升级 OpenSSH
查看>>
标准功能模块组件 -- 名片管理组件,C\S 版本的标准用例程序,可以参考权限实现方法...
查看>>
zygote进程图
查看>>