131 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			131 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using System; | |||
|  | using System.Configuration; | |||
|  | using System.Drawing; | |||
|  | using System.IO; | |||
|  | using System.Web; | |||
|  | 
 | |||
|  | namespace BLL | |||
|  | { | |||
|  |     public static class UpLoadImageService | |||
|  |     { | |||
|  |         /// <summary> | |||
|  |         ///  asp.net上传图片并生成缩略图  | |||
|  |         /// </summary> | |||
|  |         /// <param name="myFile">文件</param> | |||
|  |         /// <param name="sSavePath">保存的路径,些为相对服务器路径的下的文件夹</param> | |||
|  |         /// <param name="sThumbExtension">缩略图的thumb</param> | |||
|  |         /// <param name="intThumbWidth">生成缩略图的宽度</param> | |||
|  |         /// <param name="intThumbHeight">生成缩略图的高度</param> | |||
|  |         /// <returns></returns> | |||
|  |         public static string UpLoadImage(HttpPostedFile myFile, string sSavePath, string sThumbExtension, int intThumbWidth, int intThumbHeight) | |||
|  |         { | |||
|  |             string sThumbFile = ""; | |||
|  |             string sFilename = ""; | |||
|  |             int nFileLen = myFile.ContentLength; | |||
|  |             if (nFileLen == 0) | |||
|  |             { | |||
|  |                 return "没有选择上传图片"; | |||
|  |             } | |||
|  | 
 | |||
|  |             //获取upImage选择文件的扩展名  | |||
|  |             string extendName = Path.GetExtension(myFile.FileName).ToLower(); | |||
|  |             //判断是否为图片格式  | |||
|  |             if (extendName != ".jpg" && extendName != ".jpge" && extendName != ".gif" && extendName != ".bmp" && extendName != ".png") | |||
|  |             { return "图片格式不正确"; } | |||
|  | 
 | |||
|  |             byte[] myData = new Byte[nFileLen]; | |||
|  |             myFile.InputStream.Read(myData, 0, nFileLen); | |||
|  |             sFilename = SQLHelper.GetNewID(); | |||
|  |             string localRoot = ConfigurationManager.AppSettings["localRoot"]; | |||
|  |              string bigPath = localRoot + sSavePath;//物理路径 | |||
|  |             if (!Directory.Exists(bigPath)) | |||
|  |             { | |||
|  |                 Directory.CreateDirectory(bigPath); | |||
|  |             } | |||
|  | 
 | |||
|  |             FileStream newFile = new FileStream(bigPath + sFilename+ extendName, FileMode.Create, FileAccess.Write); | |||
|  |             newFile.Write(myData, 0, myData.Length); | |||
|  |             newFile.Close(); | |||
|  |             //以上为上传原图  | |||
|  | 
 | |||
|  |             try | |||
|  |             { | |||
|  |                 //原图加载  | |||
|  |                 using (Image sourceImage = Image.FromFile(bigPath + sFilename + extendName)) | |||
|  |                 { | |||
|  |                     //原图宽度和高度  | |||
|  |                     int width = sourceImage.Width; | |||
|  |                     int height = sourceImage.Height; | |||
|  |                     int smallWidth; | |||
|  |                     int smallHeight; | |||
|  | 
 | |||
|  |                     //获取第一张绘制图的大小,(比较 原图的宽/缩略图的宽   和 原图的高/缩略图的高)  | |||
|  |                     if (((decimal)width) / height <= ((decimal)intThumbWidth) / intThumbHeight) | |||
|  |                     { | |||
|  |                         smallWidth = intThumbWidth; | |||
|  |                         smallHeight = intThumbWidth * height / width; | |||
|  |                     } | |||
|  |                     else | |||
|  |                     { | |||
|  |                         smallWidth = intThumbHeight * width / height; | |||
|  |                         smallHeight = intThumbHeight; | |||
|  |                     } | |||
|  | 
 | |||
|  |                     string localRoots = localRoot + sThumbExtension; | |||
|  |                     if (!Directory.Exists(localRoots)) | |||
|  |                     { | |||
|  |                         Directory.CreateDirectory(localRoots); | |||
|  |                     } | |||
|  |                     //判断缩略图在当前文件夹下是否同名称文件存在                 | |||
|  |                     sThumbFile = localRoots + SQLHelper.GetNewID() + extendName; | |||
|  |                     //缩略图保存的绝对路径  | |||
|  |                     string smallImagePath = sThumbFile; | |||
|  | 
 | |||
|  |                     //新建一个图板,以最小等比例压缩大小绘制原图  | |||
|  |                     using (Image bitmap = new Bitmap(smallWidth, smallHeight)) | |||
|  |                     { | |||
|  |                         //绘制中间图  | |||
|  |                         using (Graphics g = Graphics.FromImage(bitmap)) | |||
|  |                         { | |||
|  |                             //高清,平滑  | |||
|  |                             g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; | |||
|  |                             g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; | |||
|  |                             g.Clear(Color.Black); | |||
|  |                             g.DrawImage( | |||
|  |                             sourceImage, | |||
|  |                             new System.Drawing.Rectangle(0, 0, smallWidth, smallHeight), | |||
|  |                             new System.Drawing.Rectangle(0, 0, width, height), | |||
|  |                             System.Drawing.GraphicsUnit.Pixel | |||
|  |                             ); | |||
|  |                         } | |||
|  |                         //新建一个图板,以缩略图大小绘制中间图  | |||
|  |                         using (System.Drawing.Image bitmap1 = new System.Drawing.Bitmap(intThumbWidth, intThumbHeight)) | |||
|  |                         { | |||
|  |                             //绘制缩略图  | |||
|  |                             using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap1)) | |||
|  |                             { | |||
|  |                                 //高清,平滑  | |||
|  |                                 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High; | |||
|  |                                 g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; | |||
|  |                                 g.Clear(Color.Black); | |||
|  |                                 int lwidth = (smallWidth - intThumbWidth) / 2; | |||
|  |                                 int bheight = (smallHeight - intThumbHeight) / 2; | |||
|  |                                 g.DrawImage(bitmap, new Rectangle(0, 0, intThumbWidth, intThumbHeight), lwidth, bheight, intThumbWidth, intThumbHeight, GraphicsUnit.Pixel); | |||
|  |                                 g.Dispose(); | |||
|  |                                 bitmap1.Save(smallImagePath, System.Drawing.Imaging.ImageFormat.Jpeg); | |||
|  |                             } | |||
|  |                         } | |||
|  |                     } | |||
|  |                 } | |||
|  |             } | |||
|  |             catch (Exception ex) | |||
|  |             { | |||
|  |                 //出错则删除  | |||
|  |                 File.Delete(localRoot + sFilename); | |||
|  |                 return "图片格式不正确"; | |||
|  |             } | |||
|  |             //返回缩略图名称  | |||
|  |             return sThumbFile; | |||
|  |         } | |||
|  |     } | |||
|  | } |