C# 創建縮略圖

C# 創建略圖程序

參考:http://www.cnblogs.com/xxssran/articles/1340980.html

稍作改動


		public enum ThumbnailMode
		{
			/// <summary>
			/// 指定高寬裁減(不變形)
			/// </summary>
			Cut,

			/// <summary>
			/// 指定寬,高按比例
			/// </summary>
			Width,

			/// <summary>
			/// 指定高,寬按比例
			/// </summary>
			Height,

			/// <summary>
			/// 指定高寬縮放(可能變形)
			/// </summary>
			HeightWidth, 
		}



		/// <summary>
		/// 生成縮略圖
		/// </summary>
		/// <param name="originalImagePath">源圖路徑(物理路徑)</param>
		/// <param name="thumbnailPath">縮略圖路徑(物理路徑)</param>
		/// <param name="width">縮略圖寬度</param>
		/// <param name="height">縮略圖高度</param>
		/// <param name="mode">生成縮略圖的方式</param>    
		/// <remarks>如果目標文件存在,將被覆蓋</remarks>
		public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, ThumbnailMode mode)
		{
			// 如果原始文件不存在就不需要處理
			if (!File.Exists(originalImagePath))
			{
				return;
			}

			using (Image originalImage = Image.FromFile(originalImagePath))
			{
				Rectangle destRect, srcRect;
				GetThumbnailSize(width, height, mode, originalImage, out destRect, out srcRect);

				//新建一個bmp圖片
				using (Image bitmap = new System.Drawing.Bitmap(destRect.Width, destRect.Height))
				{
					//新建一個畫板
					using (Graphics g = System.Drawing.Graphics.FromImage(bitmap))
					{
						//設置高質量插值法
						g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;

						//設置高質量,低速度呈現平滑程度
						g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;

						//清空畫布並以透明背景色填充
						g.Clear(Color.Transparent);

						//在指定位置並且按指定大小繪製原圖片的指定部分
						g.DrawImage(originalImage, destRect, srcRect, GraphicsUnit.Pixel);
					}
					
					//以jpg格式保存縮略圖
					bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
				}
			}
		}

		/// <summary>
		/// 計算縮略圖處理大小
		/// </summary>
		/// <param name="towidth">縮略圖目標寬度</param>
		/// <param name="toheight">縮略圖目標高度</param>
		/// <param name="mode">縮放模式</param>
		/// <param name="originalImage">原始圖像</param>
		/// <param name="destRect">目標大小</param>
		/// <param name="srcRect">處理範圍</param>
		private static void GetThumbnailSize(int towidth, int toheight, ThumbnailMode mode, Image originalImage, out Rectangle destRect, out Rectangle srcRect)
		{
			int x = 0, y = 0;
			int ow = originalImage.Width;
			int oh = originalImage.Height;

			switch (mode)
			{
				case ThumbnailMode.HeightWidth://指定高寬縮放(可能變形)
					break;
				case ThumbnailMode.Width://指定寬,高按比例
					toheight = originalImage.Height * towidth / originalImage.Width;
					break;
				case ThumbnailMode.Height://指定高,寬按比例
					towidth = originalImage.Width * toheight / originalImage.Height;
					break;
				case ThumbnailMode.Cut://指定高寬裁減(不變形)
					if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
					{
						oh = originalImage.Height;
						ow = originalImage.Height * towidth / toheight;
						y = 0;
						x = (originalImage.Width - ow) / 2;
					}
					else
					{
						ow = originalImage.Width;
						oh = originalImage.Width * toheight / towidth;
						x = 0;
						y = (originalImage.Height - oh) / 2;
					}
					break;
				default:
					break;
			}
			destRect = new Rectangle(0, 0, towidth, toheight);
			srcRect = new Rectangle(x, y, ow, oh);
		}


完整處理程序在這裏下載

http://download.csdn.net/detail/greenery/7220333

執行方式  MakeThumbnail.exe 圖片名稱 縮略圖.jpg

縮略圖大小在配置文件中讀取

輸出格式固定爲jpg




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章