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 "没有选择图片";    
   }
C#裁剪照片并保存的更多相关文章
- php实现调用微信上传照片然后保存至服务器与数据库
		<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> <s ... 
- Instagram发布动态自动裁剪照片说明
		发布Ins时,照片总是被截取一截,感觉很不爽...然后就仔细了解了Ins是如何限制图片大小的. 官方帮助说的很清楚,https://help.instagram.com/163182164042672 ... 
- 用windows 画图 裁剪照片
		图片大小432*312 1.裁剪大小:打开画图--找到矩形选择 形状裁剪完之后,像素会有相应的变化 2.单纯调整像素: 打开画图----重新调整大小(去掉保持纵横比之后可以任意调整大小) 题目:上传 ... 
- iOS开发之保存照片到系统相册(Photo Album)
		iOS开发之保存照片到系统相册(Photo Album) 保存照片到系统相册这个功能很多社交类的APP都有的,今天我们简单讲解一下,如何将图片保存到系统相册(Photo Album). 创建UIIma ... 
- Android调用系统相机拍照保存照片很小解决方案
		保存图片小的一般操作步骤: 1. 调用系统相机 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityFo ... 
- android 照相或从相册获取图片并裁剪
		照相或从相册获取图片并裁剪 在android应用中很多时候都要获取图片(例如获取用户的头像)就需要从用户手机上获取图片.可以直接照,也可以从用户SD卡上获取图片,但获取到的图片未必能达到要求.所以要对 ... 
- [Android] 图片裁剪总结——调用系统裁剪
		花了两天时间看了下android的图片裁剪功能的实现.其实刚开始做这个我挺虚的,以为整个功能都需要自己写出来,但查了些资料,发现android已经提供了裁剪功能,需要的话自己调用就成了.soga,这下 ... 
- Intent 常用场景 FileProvider 拍照 裁剪 MD
		Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ... 
- 4.4系统,拍照-裁剪,resultCode返回0
		问题描述: take photo -> 拍照 -> 确定 -> 截图 -> 保存,此时返回给onActivityResult的resultCode是0,截图无效.我查看图片储存 ... 
随机推荐
- 快排找第k大模板
			int get_kth(int l,int r) { if (l==r) return a[r]; ]; while (i<j) { while (a[i]<mid) i++; while ... 
- 一模  (4) day2
			第一题: 题目大意:二进制数 n mod m 的结果是多少? n 的长度(二进制数的位数)<=200 000: m 的长度(二进制数的位数)<=20. 解题过程: 1.我的算法是直接高 ... 
- 改变Chrome浏览器主程序_缓存_个人信息路径
			改变Chrome浏览器缓存_个人信息路径(亲测) actionx2上传于2012-10-26|(7人评价)|3077人阅读|41次下载|文档简介|举报文档 在手机打开 改变 Chrom ... 
- struts2的 result 通配符 OGNL
			result: 1). result 是 action 节点的子节点 2). result 代表 action 方法执行后, 可能去的一个目的地 3). 一个 action 节点可以配置多个 resu ... 
- JS页面打印,预览,设置,分页
			一)在HTML页中加载打印对象 <object id="WebBrowser" width="0" height="0" classi ... 
- 转:Java面试题集(1-50)
			Java程序员面试题集(1-50) http://blog.csdn.net/jackfrued/article/details/17403101 一.Java基础部分 1.面向对象的特征有哪些方面? ... 
- Ogre 1.8 terrain 和 paging 组件
			以下转自:http://hi.baidu.com/xocoder/item/e8d87cf53d87612b753c4cfd OGRE地形生成 OGRE可以通过两个接口来生成地形,分别是void Te ... 
- FreebuF黑客专访系列之吴翰清(刺):接下来几年,有两样东西必定会火
			注:吴翰清——中国网络安全圈最具影响力的人物之一.西安交大少年班毕业,大学期间创办民间组织幻影,阿里巴巴集团最年轻的高级安全专家,创新工场安全宝任联合副总裁,热门公众微信“道哥的黑板报”幕后作 ... 
- 虚拟机安装Linux系统图文教程
			虚拟机安装Linux系统图文教程 | 浏览:523 | 更新:2014-09-16 15:31 1 2 3 4 5 6 7 分步阅读 Linux系统的安装 工具/原料 VMware 9.0 虚拟机 L ... 
- iOS开发:icon和启动图尺寸
			歪果仁的总结: Asset iPhone 6s Plus and iPhone 6 Plus (@3x) iPhone 6s, iPhone 6, and iPhone 5 (@2x) iPhone ... 
