程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#生成圖片縮略圖(2種思路),

C#生成圖片縮略圖(2種思路),

編輯:C#入門知識

C#生成圖片縮略圖(2種思路),


 前言:在日常圖片浏覽中,如果圖片過多,只有一張張的打開圖片才能知道圖片的內容,顯然這樣浏覽起來非常不便。Windows系統在浏覽圖片時提供了縮略圖的功能,這樣大大的方便了浏覽者了解每張圖片的內容,本實例采用兩種方式實現了與Windows系統縮略圖相同的功能。

第一種:生成MakeThumbnail方法

1 //// <summary> 2 /// 生成縮略圖 3 /// </summary> 4 /// <param name="originalImagePath">源圖路徑(物理路徑)</param> 5 /// <param name="thumbnailPath">縮略圖路徑(物理路徑)</param> 6 /// <param name="width">縮略圖寬度</param> 7 /// <param name="height">縮略圖高度</param> 8 /// <param name="mode">生成縮略圖的方式</param> 9 public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode) 10 { 11   Image originalImage = Image.FromFile(originalImagePath); 12 13 int towidth = width; 14 int toheight = height; 15 16 int x = 0; 17 int y = 0; 18 int ow = originalImage.Width; 19 int oh = originalImage.Height; 20 21 switch (mode) 22 { 23 case "HW"://指定高寬縮放(可能變形) 24 break; 25 case "W"://指定寬,高按比例 26 toheight = originalImage.Height * width/originalImage.Width; 27 break; 28 case "H"://指定高,寬按比例 29 towidth = originalImage.Width * height/originalImage.Height; 30 break; 31 case "Cut"://指定高寬裁減(不變形) 32  if((double)originalImage.Width/(double)originalImage.Height > (double)towidth/(double)toheight) 33   { 34   oh = originalImage.Height; 35    ow = originalImage.Height*towidth/toheight; 36    y = 0; 37 x = (originalImage.Width - ow)/2; 38   } 39    else 40   { 41   ow = originalImage.Width; 42   oh = originalImage.Width*height/towidth; 43   x = 0; 44    y = (originalImage.Height - oh)/2; 45   } 46 break; 47 default : 48 break; 49 } 50 51 //新建一個bmp圖片 52 Image bitmap = new System.Drawing.Bitmap(towidth,toheight); 53 54 //新建一個畫板 55 Graphics g = System.Drawing.Graphics.FromImage(bitmap); 56 57 //設置高質量插值法 58 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; 59 60 //設置高質量,低速度呈現平滑程度 61 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; 62 63 //清空畫布並以透明背景色填充 64 g.Clear(Color.Transparent); 65 66 //在指定位置並且按指定大小繪制原圖片的指定部分 67 g.DrawImage(originalImage, new Rectangle(0, 0, towidth, toheight), new Rectangle(x, y, ow,oh),GraphicsUnit.Pixel); 68 try 69 { 70   //以jpg格式保存縮略圖 71   bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg); 72 } 73 catch(System.Exception e) 74 { 75 throw e; 76 } 77 finally 78 { 79   originalImage.Dispose(); 80 bitmap.Dispose(); 81 g.Dispose(); 82 } 83 } 84 85 ThumbnailClass MakeThumbnail

第二種:寫成ThumbnailClass類,書寫4個重載方法,有直接返回Image對象的,有生成縮略圖,並且保存到指定目錄等等

1 using System.IO; 2 using System.Drawing; 3 using System.Drawing.Imaging; 4 5 /// <summary> 6 /// 圖片處理類 7 /// 1、生成縮略圖片或按照比例改變圖片的大小和畫質 8 /// 2、將生成的縮略圖放到指定的目錄下 9 /// </summary> 10 public class ImageClass 11 { 12 public Image ResourceImage; 13 private int ImageWidth; 14 private int ImageHeight; 15 16 public string ErrMessage; 17 18 /// <summary> 19 /// 類的構造函數 20 /// </summary> 21 /// <param name="ImageFileName">圖片文件的全路徑名稱</param> 22 public ImageClass(string ImageFileName) 23 { 24 ResourceImage=Image.FromFile(ImageFileName); 25 ErrMessage=""; 26 } 27 28 public bool ThumbnailCallback() 29 { 30 return false; 31 } 32 33 /// <summary> 34 /// 生成縮略圖重載方法1,返回縮略圖的Image對象 35 /// </summary> 36 /// <param name="Width">縮略圖的寬度</param> 37 /// <param name="Height">縮略圖的高度</param> 38 /// <returns>縮略圖的Image對象</returns> 39 public Image GetReducedImage(int Width,int Height) 40 { 41 try 42 { 43 Image ReducedImage; 44 45 Image.GetThumbnailImageAbort callb=new Image.GetThumbnailImageAbort(ThumbnailCallback); 46 47 ReducedImage=ResourceImage.GetThumbnailImage(Width,Height,callb,IntPtr.Zero); 48 49 return ReducedImage; 50 } 51 catch(Exception e) 52 { 53 ErrMessage=e.Message; 54 return null; 55 } 56 } 57 58 /// <summary> 59 /// 生成縮略圖重載方法2,將縮略圖文件保存到指定的路徑 60 /// </summary> 61 /// <param name="Width">縮略圖的寬度</param> 62 /// <param name="Height">縮略圖的高度</param> 63 /// <param name="targetFilePath">縮略圖保存的全文件名,(帶路徑),參數格式:D:\Images\filename.jpg</param> 64 /// <returns>成功返回true,否則返回false</returns> 65 public bool GetReducedImage(int Width,int Height,string targetFilePath) 66 { 67 try 68 { 69 Image ReducedImage; 70 71 Image.GetThumbnailImageAbort callb=new Image.GetThumbnailImageAbort(ThumbnailCallback); 72 73 ReducedImage=ResourceImage.GetThumbnailImage(Width,Height,callb,IntPtr.Zero); 74 ReducedImage.Save(@targetFilePath,ImageFormat.Jpeg); 75 76 ReducedImage.Dispose(); 77 78 return true; 79 } 80 catch(Exception e) 81 { 82 ErrMessage=e.Message; 83 return false; 84 } 85 } 86 87 /// <summary> 88 /// 生成縮略圖重載方法3,返回縮略圖的Image對象 89 /// </summary> 90 /// <param name="Percent">縮略圖的寬度百分比 如:需要百分之80,就填0.8</param> 91 /// <returns>縮略圖的Image對象</returns> 92 public Image GetReducedImage(double Percent) 93 { 94 try 95 { 96 Image ReducedImage; 97 98 Image.GetThumbnailImageAbort callb=new Image.GetThumbnailImageAbort(ThumbnailCallback); 99 100 ImageWidth=Convert.ToInt32(ResourceImage.Width*Percent); 101 ImageHeight=Convert.ToInt32(ResourceImage.Width*Percent); 102 103 ReducedImage=ResourceImage.GetThumbnailImage(ImageWidth,ImageHeight,callb,IntPtr.Zero); 104 105 return ReducedImage; 106 } 107 catch(Exception e) 108 { 109 ErrMessage=e.Message; 110 return null; 111 } 112 } 113 114 /// <summary> 115 /// 生成縮略圖重載方法4,返回縮略圖的Image對象 116 /// </summary> 117 /// <param name="Percent">縮略圖的寬度百分比 如:需要百分之80,就填0.8</param> 118 /// <param name="targetFilePath">縮略圖保存的全文件名,(帶路徑),參數格式:D:\Images\filename.jpg</param> 119 /// <returns>成功返回true,否則返回false</returns> 120 public bool GetReducedImage(double Percent,string targetFilePath) 121 { 122 try 123 { 124 Image ReducedImage; 125 126 Image.GetThumbnailImageAbort callb=new Image.GetThumbnailImageAbort(ThumbnailCallback); 127 128 ImageWidth=Convert.ToInt32(ResourceImage.Width*Percent); 129 ImageHeight=Convert.ToInt32(ResourceImage.Width*Percent); 130 131 ReducedImage=ResourceImage.GetThumbnailImage(ImageWidth,ImageHeight,callb,IntPtr.Zero); 132 133 ReducedImage.Save(@targetFilePath,ImageFormat.Jpeg); 134 135 ReducedImage.Dispose(); 136 137 return true; 138 } 139 catch(Exception e) 140 { 141 ErrMessage=e.Message; 142 return false; 143 } 144 } 145 } ThumbnailClass

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved