网页上传图片 判断类型 检测大小 剪切图片 ASP.NET版本

本文转载自 http://www.youarebug.com/forum.php?mod=viewthread&tid=56&extra=page%3D1

我们在网页上传图片的时候,特别是上传图像等操作,需要限制用户上传图片的类型、大小、有时候还需要对图片进行剪切。这样的需求在我们工作中经常遇到。今天就来说说在web开发中,如何对上传的图片判断文件的类型、检查文件的大小、对图片进行可视化裁剪等操作。很少写帖子,有不足之处,请不吝赐教。先上图看看效果:

主要采用的技术:1、jquery.uploadify 用于图片上传 检查图片大小官网:http://www.uploadify.com/     
2、imgAreaSelect 用于选择要剪切的图片区域 官网:http://odyniec.net/projects/imgareaselect/     下载上面两个文件包待用。
步骤:
1、创建ASP.net mvc3工程 工程名为ImgUpload.
2、拷贝jquery.imgareaselect-0.9.10文件夹下面的jquery.imgareaselect.min.js文件到Scripts下面的js文件夹中。
      拷贝jquery.imgareaselect-0.9.10文件夹下面的css文件夹到Content下面。
     拷贝uploadify文件夹下面的jquery.uploadify.min.js文件到Scripts下面的js文件夹中。
     拷贝uploadify文件夹下面的uploadify.swf文件到Content下面的swf文件夹中。
     如果上面没有文件夹请自己新建。
现在的文件结构如下

<ignore_js_op style="word-wrap: break-word;"> 

3、在Script/js下创建ImgUpload.js文件,内容为:
  1. $(function () {
  2.     $('#fileToUpload').uploadify({
  3.         'progressData': 'speed',
  4.         'multi': false,
  5.         'method': 'post',
  6.         'queueID': 'some_file_queue',
  7.         'fileSizeLimit': '1000k',
  8.         'fileTypeDesc': 'Image Files',
  9.         'fileTypeExts': '*.gif; *.jpg; *.png',
  10.         'swf': '/Content/swf/uploadify.swf',
  11.         'uploader': '/User/UploadImg',
  12.         'onUploadStart': function (file) {
  13.             $('#fileToUpload').uploadify('disable', true)
  14.         }, 'onUploadComplete': function (file) {
  15.             $('#fileToUpload').uploadify('disable', false)
  16.         }, 'onUploadSuccess': function (file, data, response) {
  17.             $('#fileToUpload').uploadify('disable', false)
  18.             $("#PreviewImg").attr("src", "/Content/TempImg/" + data);
  19.             $("#PreviewImg").attr("data-value", data);
  20.         }
  21.         // Put your options here
  22.     });
  23.     $('#PreviewImg').imgAreaSelect({
  24.         handles: true,
  25.         onSelectEnd: preview
  26.     });
  27.     $("#savebtn").click(function () {
  28.         $.ajax({
  29.             url: "/User/SaveHeaderImg?fileName=" + $("#preview_img").attr("src"),
  30.             dataType: "text",
  31.             success: function (json) {
  32.                 $("#tiebaSaveOkMsg").attr("style", "font-size: 110%; font-weight: bold; padding-left: 0.1em;display: block;");
  33.                 $("#savebtn_swap").attr("style", "display:none");
  34.             }
  35.         });
  36.     });
  37. });
  38. function preview(img, selection) {
  39.     if (!selection.width || !selection.height)
  40.         return;
  41.     var previewImg = $("#PreviewImg").attr("src");
  42.     if ('/Content/Header/defaut.png' == previewImg) return;
  43.     $.ajax({
  44.         url: "/User/CutoutImg?fileName=" + previewImg + "&top=" + selection.y1 + "&left=" + selection.x1 + "&width=" + selection.width + "&height=" + selection.height,
  45.         dataType: "text",
  46.         success: function (json) {
  47.             $("#preview_img").attr("src", "/Content/TempImg/" + json);
  48.             $("#savebtn_swap").attr("style", "display:block;text-align:center; ");
  49.             $("#tiebaSaveOkMsg").attr("style", "display:none");
  50.         }
  51.     });
  52. }
复制代码

4、创建Home控制器。添加ImgUpload方法以及视图。
ImgUpload视图的代码如下:

  1. @{
  2.     ViewBag.Title = "HeaderImgPage";
  3.     Layout = null;
  4. }
  5. <link rel="stylesheet" type="text/css" href="@Url.Content("~/Content/css/uploadify.css")">
  6. <link rel="stylesheet" type="text/css" href="@Url.Content("~/Content/css/imgareaselect-animated.css")">
  7. <link rel="stylesheet" type="text/css" href="@Url.Content("~/Content/css/imgareaselect-default.css")">
  8. <link rel="stylesheet" type="text/css" href="@Url.Content("~/Content/css/imgareaselect-deprecated.css")">
  9. <script src="@Url.Content("~/Scripts/jquery-1.5.1.js ")" type="text/javascript"></script>
  10. <script src="@Url.Content("~/Scripts/js/ImgUpload.js")" type="text/javascript"></script>
  11. <script src="@Url.Content("~/Scripts/js/jquery.uploadify.min.js")" type="text/javascript"></script>
  12. <script src="@Url.Content("~/Scripts/js/jquery.imgareaselect.min.js")" type="text/javascript"></script>
  13. <style type="text/css">
  14.     body 
  15.     {
  16.         background:#fff;
  17.     }
  18. </style>
  19. <div class="container-box">
  20.     <p style="font-size: 110%; font-weight: bold; padding-left: 0.1em;">
  21.         1、择一张图片
  22.     </p>
  23.     <div >
  24.         <div style=" float:left; height:50px">
  25.             <input type="file" id="fileToUpload"  name="fileToUpload" />
  26.         </div>
  27.         <div id="some_file_queue" style=" float:left;height:50px; width:300px; margin-left:30px; "></div> 
  28.     </div>
  29.         <div style="float: left; clear:both;">
  30.                 <p style="font-size: 110%; font-weight: bold; padding-left: 0.1em;">
  31.                         2、点击鼠标拖动相框截取图像
  32.                 </p>
  33.                 <div class="frame" style="margin: 0 0.3em; width: 300px; height: 300px;">
  34.                         <img id="PreviewImg" src="/Content/defaut.png" style="width: 300px; height: 300px;">
  35.                 </div>
  36.         </div>
  37.         <div style="float: left;">
  38.                 <p style="font-size: 110%; font-weight: bold; padding-left: 0.1em;">
  39.                         3、预览截取的图像,点击保存。
  40.                 </p>
  41.         <div style="text-align:center">
  42.             <div class="frame" style="margin: 0 auto; width: 100px; height: 100px;">
  43.                             <img id="preview_img" src="/Content/defaut.png" style="width: 100px; height: 100px;">
  44.                     </div>
  45.         </div>
  46.         <div id="savebtn_swap" style="text-align:center; display:none">
  47.             <div style="margin: 20 auto 0 auto; width:70px;">
  48.                 <input type="submit" id="savebtn" class="setting-submit-btn setting-submit-ml100" value="保存">
  49.             </div>
  50.         </div>
  51.         <div class="save-ok" style="font-size: 110%;text-align:center; font-weight: bold; padding-left: 0.1em;display: none;" id="tiebaSaveOkMsg" >
  52.                     <div style="margin: 20 auto 0 auto; width:90px;">
  53.                 <p>保存成功</p>
  54.             </div>
  55.             </div>
  56.         </div>
  57. </div>
复制代码


5、在Home控制器中添加UploadImg,CutoutImg,SaveHeaderImg方法,添加后代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using System.IO;
  7. using System.Drawing;
  8. namespace ImgUpload.Controllers
  9. {
  10.     public class HomeController : Controller
  11.     {
  12.         //
  13.         // GET: /Home/
  14.         public ActionResult Index()
  15.         {
  16.             return View();
  17.         }
  18.         public ActionResult ImgUpload()
  19.         {
  20.             return View();
  21.         }
  22.         /// <summary>
  23.         /// 上传图片接口 上传头像使用
  24.         /// </summary>
  25.         /// <returns></returns>
  26.         [HttpPost]
  27.         public String UploadImg()
  28.         {
  29.             HttpPostedFileBase postedFile_pic = Request.Files["Filedata"];//获取上传信息对象  
  30.             if (postedFile_pic != null && postedFile_pic.ContentLength != 0)
  31.             {
  32.                 String PicFilePath = postedFile_pic.FileName;//获取上传的文件路径  
  33.                 String PicName = Path.GetFileNameWithoutExtension(postedFile_pic.FileName);//获取文件名
  34.                 String SavePath = Server.MapPath("/Content/TempImg/");
  35.                 String PicExtension = PicFilePath.Substring(PicFilePath.LastIndexOf('.'));//获取拓展名
  36.                 //构造随机名称
  37.                 String Photo = PicName + "_" + DateTime.Now.Ticks + PicExtension;
  38.                 postedFile_pic.SaveAs(SavePath + Photo);
  39.                 //规格化
  40.                 System.Drawing.Image image = System.Drawing.Image.FromFile(SavePath + Photo);
  41.                 //接着创建一个System.Drawing.Bitmap对象,并设置你希望的缩略图的宽度和高度。
  42.                 int srcWidth = image.Width;
  43.                 int srcHeight = image.Height;
  44.                 Bitmap bmp = new Bitmap(300, 300);
  45.                 //从Bitmap创建一个System.Drawing.Graphics对象,用来绘制高质量的缩小图。
  46.                 System.Drawing.Graphics gr = System.Drawing.Graphics.FromImage(bmp);
  47.                 //设置 System.Drawing.Graphics对象的SmoothingMode属性为HighQuality
  48.                 gr.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
  49.                 //下面这个也设成高质量
  50.                 gr.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
  51.                 //下面这个设成High
  52.                 gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
  53.                 //把原始图像绘制成上面所设置宽高的缩小图
  54.                 System.Drawing.Rectangle rectDestination = new System.Drawing.Rectangle(0, 0, 300, 300);
  55.                 gr.DrawImage(image, rectDestination, 0, 0, srcWidth, srcHeight, GraphicsUnit.Pixel);
  56.                 String NewPhoto = "__" + PicName + "_" + DateTime.Now.Ticks + PicExtension;
  57.                 bmp.Save(SavePath + NewPhoto);
  58.                 bmp.Dispose();
  59.                 image.Dispose();
  60.                 FileInfo fi = new FileInfo(SavePath + Photo);
  61.                 fi.Delete();
  62.                 return NewPhoto;
  63.             }
  64.             return "Invalid file type";
  65.         }
  66.         /// <summary>
  67.         /// 裁剪图片
  68.         /// </summary>
  69.         /// <param name="fileName"></param>
  70.         /// <param name="top"></param>
  71.         /// <param name="left"></param>
  72.         /// <param name="width"></param>
  73.         /// <param name="height"></param>
  74.         /// <returns></returns>
  75.         public String CutoutImg(String fileName, int top, int left, int width, int height)
  76.         {
  77.             String PicExtension = fileName.Substring(fileName.LastIndexOf('.'));//获取拓展名
  78.             String Photo = "__" + DateTime.Now.Ticks + PicExtension;
  79.             String RootPath = Server.MapPath("/");
  80.             String HeaderImgPath = Server.MapPath("/Content/TempImg/");
  81.             Bitmap bmp = new Bitmap(RootPath + fileName);
  82.             Rectangle rect = new Rectangle(left, top, width, height);
  83.             Bitmap tempBitmap = bmp.Clone(rect, bmp.PixelFormat);
  84.             tempBitmap.Save(HeaderImgPath + Photo);
  85.             bmp.Dispose();
  86.             tempBitmap.Dispose();
  87.             return Photo;
  88.         }
  89.         public String SaveHeaderImg(String fileName)
  90.         {
  91.             String RootPath = Server.MapPath("/");
  92.             String PicExtension = fileName.Substring(fileName.LastIndexOf('.'));
  93.             String NewName = "__" + DateTime.Now.Ticks + PicExtension;
  94.             String HeaderImgPath = Server.MapPath("/Content/Header/");
  95.             FileInfo fi = new FileInfo(RootPath + fileName);
  96.             fi.MoveTo(HeaderImgPath + NewName);
  97.             return "";
  98.         }
  99.     }
  100. }
复制代码


6、运行,在浏览器中输入
http://localhost:6133/Home/ImgUpload即可。
保存后的截图保存在Content/Header文件夹下面。


7、完整源码下载

http://www.youarebug.com/forum.php?mod=viewthread&tid=56&extra=page%3D1

猜你喜欢

转载自fuchuanblue.iteye.com/blog/2025371