方法一:經過調用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("轉換失敗,請重試!"); } }
方法二:採用雙三次插值法,執行預篩選以確保高質量的收縮,此模式可產生質量教高的轉換圖像。(使用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; } } }