zoukankan      html  css  js  c++  java
  • C#图片无损压缩


    /引用命名空间
    using System.Drawing.Imaging;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    #region GetPicThumbnail
        /// <summary>
        /// 无损压缩图片
        /// </summary>
        /// <param name="sFile">原图片</param>
        /// <param name="dFile">压缩后保存位置</param>
        /// <param name="dHeight">高度</param>
        /// <param name="dWidth"></param>
        /// <param name="flag">压缩质量 1-100</param>
        /// <returns></returns>
     
        public bool GetPicThumbnail(string sFile, string dFile, int dHeight, int dWidth, int flag)
        {
            System.Drawing.Image iSource = System.Drawing.Image.FromFile(sFile);
     
            ImageFormat tFormat = iSource.RawFormat;
     
            int sW = 0, sH = 0;
     
            //按比例缩放
     
            Size tem_size = new Size(iSource.Width, iSource.Height);
     
     
     
            if (tem_size.Width > dHeight || tem_size.Width > dWidth) //将**改成c#中的或者操作符号
            {
     
                if ((tem_size.Width * dHeight) > (tem_size.Height * dWidth))
                {
     
                    sW = dWidth;
     
                    sH = (dWidth * tem_size.Height) / tem_size.Width;
     
                }
     
                else
                {
     
                    sH = dHeight;
     
                    sW = (tem_size.Width * dHeight) / tem_size.Height;
     
                }
     
            }
     
            else
            {
     
                sW = tem_size.Width;
     
                sH = tem_size.Height;
     
            }
     
            Bitmap ob = new Bitmap(dWidth, dHeight);
     
            Graphics g = Graphics.FromImage(ob);
     
            g.Clear(Color.WhiteSmoke);
     
            g.CompositingQuality = CompositingQuality.HighQuality;
     
            g.SmoothingMode = SmoothingMode.HighQuality;
     
            g.InterpolationMode = InterpolationMode.HighQualityBicubic;
     
            g.DrawImage(iSource, new Rectangle((dWidth - sW) / 2, (dHeight - sH) / 2, sW, sH), 0, 0, iSource.Width, iSource.Height, GraphicsUnit.Pixel);
     
            g.Dispose();
     
            //以下代码为保存图片时,设置压缩质量
     
            EncoderParameters ep = new EncoderParameters();
     
            long[] qy = new long[1];
     
            qy[0] = flag;//设置压缩的比例1-100
     
            EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
     
            ep.Param[0] = eParam;
     
            try
            {
     
                ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders();
     
                ImageCodecInfo jpegICIinfo = null;
     
                for (int x = 0; x < arrayICI.Length; x++)
                {
     
                    if (arrayICI[x].FormatDescription.Equals("JPEG"))
                    {
     
                        jpegICIinfo = arrayICI[x];
     
                        break;
     
                    }
     
                }
     
                if (jpegICIinfo != null)
                {
     
                    ob.Save(dFile, jpegICIinfo, ep);//dFile是压缩后的新路径
     
                }
     
                else
                {
     
                    ob.Save(dFile, tFormat);
     
                }
     
                return true;
     
            }
     
            catch
            {
     
                return false;
     
            }
     
            finally
            {
     
                iSource.Dispose();
     
                ob.Dispose();
     
            }
     
     
     
        }
        #endregion
  • 相关阅读:
    【Java EE 学习 81】【CXF框架】【CXF整合Spring】
    【Java EE 学习 80 下】【调用WebService服务的四种方式】【WebService中的注解】
    【Java EE 学习 80 上】【WebService】
    【Java EE 学习 79 下】【动态SQL】【mybatis和spring的整合】
    【Java EE 学习 79 上】【mybatis 基本使用方法】
    【Java EE 学习 78 下】【数据采集系统第十天】【数据采集系统完成】
    【Java EE 学习 78 中】【数据采集系统第十天】【Spring远程调用】
    【Java EE 学习 78 上】【数据采集系统第十天】【Service使用Spring缓存模块】
    【Java EE 学习 77 下】【数据采集系统第九天】【使用spring实现答案水平分库】【未解决问题:分库查询问题】
    【Java EE 学习 77 上】【数据采集系统第九天】【通过AOP实现日志管理】【通过Spring石英调度动态生成日志表】【日志分表和查询】
  • 原文地址:https://www.cnblogs.com/diulela/p/4354495.html
Copyright © 2011-2022 走看看