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




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