zoukankan      html  css  js  c++  java
  • C#裁剪照片并保存

    /// <summary>
        ///
        /// </summary>
        /// <summary>
        /// 生成缩略图
        /// </summary>
        /// <param name="sSavePath">源图路径(物理路径)</param>
        /// <param name="sThumbExtension">缩略图路径(物理路径)</param>
        /// <param name="width">缩略图宽度</param>
        /// <param name="height">缩略图高度</param>
        /// <param name="mode">生成缩略图的方式</param>   
        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;   
               //检查当前文件夹下是否有同名图片,有则在文件名+1   
              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();   
                                   bitmap1.Save(smallImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);   
                              }   
                           }   
                     }   
                 }   
           }   
               catch   
              {   
                  //出错则删除   
                 System.IO.File.Delete(System.Web.HttpContext.Current.Server.MapPath(sSavePath + sFilename));                  return "图片格式不正确";   
              }   
               //返回缩略图名称   
               return sThumbFile;   
           }   
           return "没有选择图片";   
       }  

  • 相关阅读:
    ADF中遍历VO中的行数据(Iterator)
    程序中实现两个DataTable的Left Join效果(修改了,网上第二个DataTable为空,所处的异常)
    ArcGIS api for javascript——鼠标悬停时显示信息窗口
    ArcGIS api for javascript——查询,然后单击显示信息窗口
    ArcGIS api for javascript——查询,立刻打开信息窗口
    ArcGIS api for javascript——显示多个查询结果
    ArcGIS api for javascript——用图表显示查询结果
    ArcGIS api for javascript——查询没有地图的数据
    ArcGIS api for javascript——用第二个服务的范围设置地图范围
    ArcGIS api for javascript——显示地图属性
  • 原文地址:https://www.cnblogs.com/zcwry/p/jpg.html
Copyright © 2011-2022 走看看