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
  • 相关阅读:
    八数码难题 (codevs 1225)题解
    小木棍 (codevs 3498)题解
    sliding windows (poj 2823) 题解
    集合删数 (vijos 1545) 题解
    合并果子 (codevs 1063) 题解
    等价表达式 (codevs 1107)题解
    生理周期 (poj 1006) 题解
    区间 (vijos 1439) 题解
    区间覆盖问题 题解
    种树 (codevs 1653) 题解
  • 原文地址:https://www.cnblogs.com/diulela/p/4354495.html
Copyright © 2011-2022 走看看