午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

C#圖片壓縮方法

 weixinxiang 2014-10-13

C#圖片壓縮方法

來(lái)源:ab藍(lán)學(xué)網(wǎng)整理     時(shí)間:2014-02-21    點(diǎn)擊:32    歡迎網(wǎng)友投稿我來(lái)投稿
簡(jiǎn)介:這個(gè)是未經(jīng)優(yōu)化的簡(jiǎn)單實(shí)現(xiàn)publicstaticSystem.Drawing.ImageGetImageThumb(System.Drawing.Imageso
 這個(gè)是未經(jīng)優(yōu)化的簡(jiǎn)單實(shí)現(xiàn) 


public static System.Drawing.Image GetImageThumb(System.Drawing.Image sourceImg, int width, int height) 
        { 
            System.Drawing.Image targetImg = new System.Drawing.Bitmap(width, height); 
            using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(targetImg)) 
            { 
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; 
                g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; 
                g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality; 
                g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality; 
                g.DrawImage(sourceImg, new System.Drawing.Rectangle(0, 0, width, height), new System.Drawing.Rectangle(0, 0, sourceImg.Width, sourceImg.Height), System.Drawing.GraphicsUnit.Pixel); 
                g.Dispose(); 
            } 
            return targetImg; 
        } 
這個(gè)方法比較簡(jiǎn)單,用到的是高質(zhì)量壓縮。經(jīng)過(guò)這個(gè)方法壓縮后,200K的圖片只能壓縮到160k左右。經(jīng)過(guò)改寫(xiě)代碼實(shí)現(xiàn)了如下的方法 


public Bitmap GetImageThumb(Bitmap mg, Size newSize) 
        { 
            double ratio = 0d; 
            double myThumbWidth = 0d; 
            double myThumbHeight = 0d; 
            int x = 0; 
            int y = 0; 


            Bitmap bp; 


            if ((mg.Width / Convert.ToDouble(newSize.Width)) > (mg.Height / 
            Convert.ToDouble(newSize.Height))) 
                ratio = Convert.ToDouble(mg.Width) / Convert.ToDouble(newSize.Width); 
            else 
                ratio = Convert.ToDouble(mg.Height) / Convert.ToDouble(newSize.Height); 
            myThumbHeight = Math.Ceiling(mg.Height / ratio); 
            myThumbWidth = Math.Ceiling(mg.Width / ratio); 


            Size thumbSize = new Size((int)newSize.Width, (int)newSize.Height); 
            bp = new Bitmap(newSize.Width, newSize.Height); 
            x = (newSize.Width - thumbSize.Width) / 2; 
            y = (newSize.Height - thumbSize.Height); 
            System.Drawing.Graphics g = Graphics.FromImage(bp); 
            g.SmoothingMode = SmoothingMode.HighQuality; 
            g.InterpolationMode = InterpolationMode.HighQualityBicubic; 
            g.PixelOffsetMode = PixelOffsetMode.HighQuality; 
            Rectangle rect = new Rectangle(x, y, thumbSize.Width, thumbSize.Height); 
            g.DrawImage(mg, rect, 0, 0, mg.Width, mg.Height, GraphicsUnit.Pixel); 


            return bp; 
        } 
這樣實(shí)現(xiàn)的壓縮使壓縮率大幅度上升。其實(shí)代碼并沒(méi)有變多少,最主要的是在保存的時(shí)候要是用jpg格式,如果不指定格式,默認(rèn)使用的是png格式。 


下面這個(gè)是園友寫(xiě)的根據(jù)設(shè)置圖片質(zhì)量數(shù)值來(lái)壓縮圖片的方法: 


public static bool GetPicThumbnail(string sFile, string outPath, int flag) 
        { 
            System.Drawing.Image iSource = System.Drawing.Image.FromFile(sFile); 
            ImageFormat tFormat = iSource.RawFormat; 


            //以下代碼為保存圖片時(shí),設(shè)置壓縮質(zhì)量   
            EncoderParameters ep = new EncoderParameters(); 
            long[] qy = new long[1]; 
            qy[0] = flag;//設(shè)置壓縮的比例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) 
                { 
                    iSource.Save(outPath, jpegICIinfo, ep);//dFile是壓縮后的新路徑   
                } 
                else 
                { 
                    iSource.Save(outPath, tFormat); 
                } 
                return true; 
            } 
            catch 
            { 
                return false; 
            } 
            finally 
            { 
                iSource.Dispose(); 
                iSource.Dispose(); 
            } 
        } 

如果覺(jué)得《C#圖片壓縮方法》不錯(cuò),請(qǐng)把本站告訴您身邊的朋友!

轉(zhuǎn)載注明本文地址:http://www./prone_17401_1.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約