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 "没有选择图片";   
       }  

  • 相关阅读:
    UI第十七讲.图片异步加载(包括第三方), KVO, KVC
    第二十一讲.UICollectionView(集合视图)以及瀑布流效果, 通知中心(NSNotificationCenter).
    UI第十九讲:数据库
    UI第十八讲.初级数据持久化 (沙盒, 简单写入对象, 归解档, NSUserDefaults写入读取文件 )
    第十四讲(下) 可视化方式的实现通讯录.(及storyboard方式)
    第十六讲.网络编程 (HTTP协议)
    wslgit
    MyBatis时间比较
    layer开启与关闭加载层
    MyBatis中choose when正确写法
  • 原文地址:https://www.cnblogs.com/zcwry/p/jpg.html
Copyright © 2011-2022 走看看