C#圖片無損壓縮

來源:互聯網
上載者:User
//引用命名空間
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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.