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

            /// <summary>
            /// 根据指定尺寸得到按比例缩放的尺寸,返回true表示以更改尺寸
            /// </summary>
            /// <param name="picWidth">图片宽度</param>
            /// <param name="picHeight">图片高度</param>
            /// <param name="specifiedWidth">指定宽度</param>
            /// /// <param name="specifiedHeight">指定高度</param>
            /// <returns>返回true表示以更改尺寸</returns>
            private bool GetPicZoomSize(ref int picWidth, ref int picHeight, int specifiedWidth, int specifiedHeight)
            {
                int sW = 0, sH = 0;
                Boolean isZoomSize = false;
                //按比例缩放
                Size tem_size = new Size(picWidth, picHeight);
                if (tem_size.Width > specifiedWidth || tem_size.Height > specifiedHeight) //将**改成c#中的或者操作符号
                {
                    if ((tem_size.Width * specifiedHeight) > (tem_size.Height * specifiedWidth))
                    {
                        sW = specifiedWidth;
                        sH = (specifiedWidth * tem_size.Height) / tem_size.Width;
                    }
                    else
                    {
                        sH = specifiedHeight;
                        sW = (tem_size.Width * specifiedHeight) / tem_size.Height;
                    }
                    isZoomSize = true;
                }
                else
                {
                    sW = tem_size.Width;
                    sH = tem_size.Height;
                }
                picHeight = sH;
                picWidth = sW;
                return isZoomSize;
            }
            /// <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 = iSource.Width, sH = iSource.Height;
                
                GetPicZoomSize(ref sW, ref sH, dWidth, dHeight);
    
                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();
    
                }
            }

     缩放图片也会改变图片大小

  • 相关阅读:
    luarocks argparse
    Shell中for循环的几个常用写法
    linux
    Docker修改镜像源为阿里云
    ntpdate更新服务器时间失败
    linux文本三剑客之 sed
    [Union]C++中Union学习笔记
    [sublime] 利用sublime搭建C/C++编译器
    [wordpress]WordPress地址(URL)错误,修改解决方案
    [wordpress]更新插件时,免去FTP操作
  • 原文地址:https://www.cnblogs.com/tpfOfBlog/p/6700431.html
Copyright © 2011-2022 走看看