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

C#裁剪照片并保存的更多相关文章

  1. php实现调用微信上传照片然后保存至服务器与数据库

    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>    <s ...

  2. Instagram发布动态自动裁剪照片说明

    发布Ins时,照片总是被截取一截,感觉很不爽...然后就仔细了解了Ins是如何限制图片大小的. 官方帮助说的很清楚,https://help.instagram.com/163182164042672 ...

  3. 用windows 画图 裁剪照片

    图片大小432*312 1.裁剪大小:打开画图--找到矩形选择 形状裁剪完之后,像素会有相应的变化 2.单纯调整像素:  打开画图----重新调整大小(去掉保持纵横比之后可以任意调整大小) 题目:上传 ...

  4. iOS开发之保存照片到系统相册(Photo Album)

    iOS开发之保存照片到系统相册(Photo Album) 保存照片到系统相册这个功能很多社交类的APP都有的,今天我们简单讲解一下,如何将图片保存到系统相册(Photo Album). 创建UIIma ...

  5. Android调用系统相机拍照保存照片很小解决方案

    保存图片小的一般操作步骤: 1. 调用系统相机 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityFo ...

  6. android 照相或从相册获取图片并裁剪

    照相或从相册获取图片并裁剪 在android应用中很多时候都要获取图片(例如获取用户的头像)就需要从用户手机上获取图片.可以直接照,也可以从用户SD卡上获取图片,但获取到的图片未必能达到要求.所以要对 ...

  7. [Android] 图片裁剪总结——调用系统裁剪

    花了两天时间看了下android的图片裁剪功能的实现.其实刚开始做这个我挺虚的,以为整个功能都需要自己写出来,但查了些资料,发现android已经提供了裁剪功能,需要的话自己调用就成了.soga,这下 ...

  8. Intent 常用场景 FileProvider 拍照 裁剪 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  9. 4.4系统,拍照-裁剪,resultCode返回0

    问题描述: take photo -> 拍照 -> 确定 -> 截图 -> 保存,此时返回给onActivityResult的resultCode是0,截图无效.我查看图片储存 ...

随机推荐

  1. TDBGridEh的 搜索面板 TDBGridSearchPanel

    TCustomDBGridEh.Create FSearchPanelControl := TDBGridSearchPanelControlEh.Create(Self); //这里,创建的构造函数 ...

  2. 租房时代,K2 BPM软件带你拥抱更好生活

    提到租房子,你的第一反应肯定就是心酸的找房路,奇葩的极品房东……但租房对于年轻人来说又是生存路上必须面对的挑战.现在有一家公司想给你一段租房时代的美好回忆,它就是优客逸家. 优客逸家,隶属于四川优客投 ...

  3. 经典线程同步 关键段CS

    上一篇<秒杀多线程第四篇 一个经典的多线程同步问题>提出了一个经典的多线程同步互斥问题,本篇将用关键段CRITICAL_SECTION来尝试解决这个问题. 本文首先介绍下如何使用关键段,然 ...

  4. 网易云课堂 OCP

    数据库DBA任务: 管理数据库可用性 设计并创建数据库 管理物理结构 管理基于设计的存储 管理安全性 网络管理 备份与恢复 数据库调整与优化 关系型数据库(RDBMS) 多个表数据之间存在着关系 关系 ...

  5. hadoop2.x通过Zookeeper来实现namenode的HA方案以及ResourceManager单点故障的解决方案

    我们知道hadoop1.x之前的namenode存在两个主要的问题:1.namenode内存瓶颈的问题,2.namenode的单点故障的问题.针对这两个问题,hadoop2.x都对它进行改进和解决.其 ...

  6. 使用sslsplit嗅探tls/ssl连接

    首先发一个从youtube弄到的sslsplit的使用教程 http://v.qq.com/page/x/k/s/x019634j4ks.html 我最近演示了如何使用mitmproxty执行中间人攻 ...

  7. 安装Windows Metasploit Framework

    Installing the Metasploit Framework on Windows 1. Visit http://windows.metasploit.com/metasploitfram ...

  8. Android异步更新UI的四种方式

    Android异步更新UI的四种方式 2015-09-06 09:23 segmentfault 字号:T | T 大家都知道由于性能要求,android要求只能在UI线程中更新UI,要想在其他线程中 ...

  9. 第二个Sprint冲刺第八天

    讨论地点:宿舍 讨论成员:邵家文.李新.朱浩龙.陈俊金 工作:更新了主界面

  10. 表视图控制器(TableViewController)(一)

    1 创建一个UITableViewController并展示简单数据 1.1 问题 有很多移动客户端的应用都是采用表的形式来展示数据,因为表视图能使数据看起来更规整.更有调理,比如微信界面就是使用的表 ...