C#產生縮圖不失真的方法

來源:互聯網
上載者:User

標籤:縮圖   c#   不失真   

最近一個手持機項目有個需求,因為物料圖片的大小不一,有的很大顯示到手持機上會只顯示圖片的一部分,介面顯得非常亂,很影響客戶的體驗度。所以需要一個方法,將上傳到伺服器上的圖片進行處理,按照一定的大小格式進行儲存。

下面提供了兩種擷取圖片縮圖的方法,供大家參考。

方法一:通過調用Image對象的內建方法GetThumbnailImage()進行圖片轉換

        /// <summary>        /// 產生縮圖重載方法,返回縮圖的Image對象        /// </summary>        /// <param name="width">縮圖的寬度</param>        /// <param name="height">縮圖的高度</param>        /// <param name="imageFrom">原Image對象</param>        /// <returns>縮圖的Image對象</returns>        public Image GetReducedImage2(int width, int height, Image imageFrom)        {            // 源圖寬度及高度             int imageFromWidth = imageFrom.Width;            int imageFromHeight = imageFrom.Height;            try            {                // 產生的縮圖實際寬度及高度.如果指定的高和寬比原圖大,則返回原圖;否則按照指定高寬產生圖片                if (width >= imageFromWidth && height >= imageFromHeight)                {                    return imageFrom;                }                else                {                    Image.GetThumbnailImageAbort callb = new Image.GetThumbnailImageAbort(() => { return false; });                    //調用Image對象內建的GetThumbnailImage()進行圖片縮減                    Image reducedImage = imageFrom.GetThumbnailImage(width, height, callb, IntPtr.Zero);                    //將圖片以指定的格式儲存到到指定的位置                    reducedImage.Save(@"E:\640x480.png", ImageFormat.Png);                    return reducedImage;                }            }            catch (Exception)            {                //拋出異常                throw new Exception("轉換失敗,請重試!");            }        }

方法二:採用雙立方插值法,執行預篩選以確保高品質的收縮,此模式可產生品質教高的轉換映像。

        /// <summary>        /// 按照指定的高和寬產生相應的規格的圖片,採用此方法產生的縮圖片不會失真        /// </summary>        /// <param name="width">指定寬度</param>        /// <param name="height">指定高度</param>        /// <param name="imageFrom">原圖片</param>        /// <returns>返回新產生的圖</returns>        public static Image GetReducedImage(int width, int height, Image imageFrom)        {            // 源圖寬度及高度             int imageFromWidth = imageFrom.Width;            int imageFromHeight = imageFrom.Height;            // 產生的縮圖實際寬度及高度.如果指定的高和寬比原圖大,則返回原圖;否則按照指定高寬產生圖片            if (width >= imageFromWidth && height >= imageFromHeight)            {                return imageFrom;            }            else            {                // 產生的縮圖在上述"畫布"上的位置                int X = 0;                int Y = 0;                // 建立畫布                Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);                bmp.SetResolution(imageFrom.HorizontalResolution, imageFrom.VerticalResolution);                using (Graphics g = Graphics.FromImage(bmp))                {                    // 用白色清空                     g.Clear(Color.White);                    // 指定高品質的雙立方插值法。執行預篩選以確保高品質的收縮。此模式可產生品質最高的轉換映像。                     g.InterpolationMode = InterpolationMode.HighQualityBicubic;                    // 指定高品質、低速度呈現。                     g.SmoothingMode = SmoothingMode.HighQuality;                    // 在指定位置並且按指定大小繪製指定的 Image 的指定部分。                     g.DrawImage(imageFrom, new Rectangle(X, Y, width, height),                        new Rectangle(0, 0, imageFromWidth, imageFromHeight), GraphicsUnit.Pixel);                    //將圖片以指定的格式儲存到到指定的位置                    bmp.Save(@"E:\640x480.png", ImageFormat.Png);                    return bmp;                }            }        }

先分享這兩種方法,大家可以嘗試。

C#產生縮圖不失真的方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.