夏草

我有一个思想,我们交换一下。各自拥有两个思想!

 

ASP.NET 缩小照片上传功能的二种方式!

方法一: 
002     /// asp.net上传图片并生成缩略图  
003     /// </summary>  
004     /// <param name="upImage">HtmlInputFile控件</param>  
005     /// <param name="sSavePath">保存的路径,些为相对服务器路径的下的文件夹</param>  
006     /// <param name="sThumbExtension">缩略图的thumb</param>  
007     /// <param name="intThumbWidth">生成缩略图的宽度</param>  
008     /// <param name="intThumbHeight">生成缩略图的高度</param>  
009     /// <returns>缩略图名称</returns>  
服务器端控件:fileupload 
public string UpLoadImage(FileUpload fileupload,string sSavePath,string sThumbExtension,int intThumbWidth,int intThumbHeight)  
public string UpLoadImage(HtmlInputFile upImage,string sSavePath,string sThumbExtension,int intThumbWidth,int intThumbHeight)  
     {  
         string sThumbFile ="";  
         string sFilename ="";         
         if(upImage.PostedFile !=null)  
         {  
             HttpPostedFile myFile = upImage.PostedFile;  
             int nFileLen = myFile.ContentLength;  
             if(nFileLen == 0)  
                 return"没有选择上传图片";             
             //获取upImage选择文件的扩展名  
             string extendName = System.IO.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 = System.IO.Path.GetFileName(myFile.FileName);  
             int file_append = 0;  
             //检查当前文件夹下是否有同名图片,有则在文件名+  
             while(System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename)))  
             {  
                 file_append++;  
                 sFilename = System.IO.Path.GetFileNameWithoutExtension(myFile.FileName)  
                     + file_append.ToString() + extendName;  
             }  
             System.IO.FileStream newFile  
                 =new System.IO.FileStream(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename),  
                 System.IO.FileMode.Create, System.IO.FileAccess.Write);  
             newFile.Write(myData,0 , myData.Length);  
             newFile.Close(); 
             //以上为上传原图 
             try  
             {  
                 //原图加载  
                 using(System.Drawing.Image sourceImage = System.Drawing.Image.FromFile(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename)))  
                 {  
                     //原图宽度和高度  
                     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;  
                     } 
                     //判断缩略图在当前文件夹下是否同名称文件存在  
                     file_append =0 ;  
                     sThumbFile = sThumbExtension + System.IO.Path.GetFileNameWithoutExtension(myFile.FileName) + extendName; 
                     while(System.IO.File.Exists(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sThumbFile)))  
                     {  
                         file_append++;  
                         sThumbFile = sThumbExtension + System.IO.Path.GetFileNameWithoutExtension(myFile.FileName) +  
                             file_append.ToString() + extendName;  
                     }  
                     //缩略图保存的绝对路径  
                     string smallImagePath = System.Web.HttpContext.Current.Server.MapPath(sSavePath) + sThumbFile; 
                     //新建一个图板,以最小等比例压缩大小绘制原图  
                     using(System.Drawing.Image bitmap =new System.Drawing.Bitmap(smallWidth, smallHeight))  
                     {  
                         //绘制中间图  
                         using(System.Drawing.Graphics g = System.Drawing.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();  
                                 bitmap.Save(smallImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);  
                             }  
                         }  
                     }  
                 }  
             }  
             catch  
             {  
                 //出错则删除  
                 System.IO.File.Delete(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename));  
                 return"图片格式不正确";  
             }  
             //返回缩略图名称  
             return sThumbFile;  
         }  
         return"没有选择图片";  
     } 
  
  
方法二: 
        /// <summary> 
        /// 图片上传,带缩略图自定义处理 
        /// </summary> 
        /// <param name="fileupload">上传控件</param> 
        /// <param name="pictureDirectoryAbsolutePath">站点下绝对目录路径 eg: "/pics/a/"</param> 
        /// <param name="newPictureName">新命名图片(不带格式部分,格式维持原来的)</param> 
        /// <param name="supportPictureType">eg: "|gif|jpg|png",如果为空,默认支持以上三种</param> 
        /// <param name="message">返回消息</param> 
        /// <param name="isCreateDefaultThumb">是否立即生成缩略图</param> 
        public static bool PictrueUpload(FileUpload fileupload, string pictureDirectoryAbsolutePath, string newPictureName, string supportPictureType, 
                out string pictureAbsolutePath, out string message, 
                bool isCreateDefaultThumb, string thumbPhysicalFullPath, int thumbWidth, int thumbHeight, out string thumbAbsolutePath) 
        { 
            message = "图片上传成功"; 
            pictureAbsolutePath = ""; 
            thumbAbsolutePath = ""; 
            #region 参数验证 
            string picturePhysicalFullPath = ""; 
            if (string.IsNullOrEmpty(fileupload.FileName)) 
            { 
                message = "请选择待上传图片"; 
                return false; ; 
            } 
            if (String.IsNullOrEmpty(pictureDirectoryAbsolutePath)) 
            { 
                message = "pictureDirectoryAbsolutePath参数不能为空"; 
                return false; 
            } 
            if (String.IsNullOrEmpty(newPictureName)) 
            { 
                message = "newPictureName参数不能为空"; 
                return false; 
            } 
            #endregion 
            //存储目录创建 
            string pictureDirectoryPhysicalPath = HttpContext.Current.Server.MapPath(pictureDirectoryAbsolutePath); 
            if (!Directory.Exists(pictureDirectoryPhysicalPath)) 
            { 
                Directory.CreateDirectory(pictureDirectoryPhysicalPath); 
            } 
            string fileName = fileupload.FileName.Trim(); 
            string typeName = fileName.Substring(fileName.LastIndexOf('.') + 1).ToLower(); 
            //上传图片格式验证 
            if (!PictureSupportFormatToValidate(typeName, supportPictureType, out message)) 
            { 
                return false; 
            } 
            //原始图片上传后的物理地址 
            picturePhysicalFullPath = pictureDirectoryPhysicalPath + newPictureName + "." + typeName; 
            //原始图片上传 
            fileupload.SaveAs(picturePhysicalFullPath); 
            //返回的图片绝对地址 
            pictureAbsolutePath = pictureDirectoryAbsolutePath + newPictureName + "." + typeName; 
            #region 缩略图处理 
            //缩略图生成处理 
            if (isCreateDefaultThumb) 
            { 
                if (String.IsNullOrEmpty(thumbPhysicalFullPath)) 
                { 
                    string thumbDirectoryPhysicalPath = String.Format("{0}thumb/", pictureDirectoryPhysicalPath); 
                    //缩略图目录创建 
                    if (!Directory.Exists(thumbDirectoryPhysicalPath)) 
                    { 
                        Directory.CreateDirectory(thumbDirectoryPhysicalPath); 
                    } 
                    //缩略图存储地址 
                    thumbPhysicalFullPath = String.Format("{0}{1}.jpg", thumbDirectoryPhysicalPath, newPictureName); 
                } 
                using (StreamReader sr = new StreamReader(picturePhysicalFullPath)) 
                { 
                    CustomPictureManager.ThumbAsJPG(sr.BaseStream, thumbPhysicalFullPath, thumbWidth, thumbHeight); 
                    thumbAbsolutePath = pictureDirectoryAbsolutePath + "thumb/" + newPictureName + "." + typeName; 
                } 
            } 
            #endregion 缩略图处理 
            return true; 
        } 

posted on 2012-05-02 14:51  夏草  阅读(1381)  评论(0编辑  收藏  举报

导航