Image 縮略圖

方法一:經過調用Image對象的自帶方法GetThumbnailImage()進行圖片轉換。ide

  /// <summary>
        /// 生成縮略圖重載方法,返回縮略圖的Image對象
        /// </summary>
        /// <param name="width">縮略圖的寬度</param>
        /// <param name="height">縮略圖的高度</param>
        /// <param name="imageFrom">原Image對象</param>
        /// <returns>縮略圖的Image對象</returns>
        public Image GetReducedImage(int width, int height, Image image)
        {
            // 源圖寬度及高度 
            int imageWidth = image.Width;
            int imageHeight = image.Height;
            try
            {
                // 生成的縮略圖實際寬度及高度.若是指定的高和寬比原圖大,則返回原圖;不然按照指定高寬生成圖片
                if (width >= imageWidth && height >= imageHeight)
                {
                    return image;
                }
                else
                {
                    Image.GetThumbnailImageAbort  getTIA = () =>false;
                    //調用Image對象自帶的GetThumbnailImage()進行圖片縮略
                    Image reducedImage = imageFrom.GetThumbnailImage(width, height, getTIA, IntPtr.Zero);
                    //將圖片以指定的格式保存到到指定的位置
                    reducedImage.Save(@"路徑名+文件名(包括擴展名,並於下一個參數相一致)", ImageFormat.Png);
                    return reducedImage;
                }
            }
            catch (Exception)
            {
                //拋出異常
                throw new Exception("轉換失敗,請重試!");
            }
        }
View Code

方法二:採用雙三次插值法,執行預篩選以確保高質量的收縮,此模式可產生質量教高的轉換圖像。(使用Graphics來從新繪製)spa

        /// <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 image)
        {
            // 源圖寬度及高度 
            int imageWidth = image.Width;
            int imageHeight = image.Height;

            // 生成的縮略圖實際寬度及高度.若是指定的高和寬比原圖大,則返回原圖;不然按照指定高寬生成圖片
            if (width >= imageWidth && height >= imageHeight)
            {
                return image;
            }
            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(image, new Rectangle(X, Y, width, height),
                        new Rectangle(0, 0, imageWidth, imageHeight), GraphicsUnit.Pixel);

                    //將圖片以指定的格式保存到到指定的位置
                    bmp.Save(@"路徑名+文件名(包括擴展名,並於下一個參數一致)", ImageFormat.Png);
                    return bmp;
                }
            }
        }
View Code
相關文章
相關標籤/搜索