Asp.net MVC 实现图片上传剪切

来源:岁月联盟 编辑:exp 时间:2012-02-24

嘿嘿,这是本人第一篇博文,请大家多多指教。
 使用技术:Asp.net MVC与jquery.uploadify,Jcrop
 首先上页面
  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  5     <title>Index</title>
  6     <link href="http://www.cnblogs.com/CSS/base.css" rel="stylesheet" type="text/css" />
  7     <script src="http://www.cnblogs.com/Js/jquery-1.7.1.min.js" type="text/javascript"></script>
  8     <script src="http://www.cnblogs.com/Js/uploadify/swfobject.js" type="text/javascript"></script>
  9     <script src="http://www.cnblogs.com/Js/uploadify/jquery.uploadify.v2.1.4.min.js" type="text/javascript"></script>
 10     <link href="http://www.cnblogs.com/Js/uploadify/uploadify.css" rel="stylesheet" type="text/css" />
 11     <script src="http://www.cnblogs.com/Js/crop/jquery.Jcrop.min.js" type="text/javascript"></script>
 12     <link href="http://www.cnblogs.com/Js/crop/jquery.Jcrop.css" rel="stylesheet" type="text/css" />
 13     <style type="text/css">
 14 /* 上传按钮*/
 15         #uploadifyUploader
 16 {
 17             margin-top: 235px;
 18 }
 19 /* 加载条*/
 20         .uploadifyQueueItem
 21 {
 22             margin: 0 auto;
 23 }
 24         #img-up
 25 {
 26             width: 700px;
 27             height: 500px;
 28             background-color: #e8f0f6;
 29             text-align: center;
 30 }
 31         #img-prev-container
 32 {
 33             width: 200px;
 34             height: 200px;
 35             overflow: hidden;
 36             clear: both;
 37 }
 38         #img-crop
 39 {
 40             display: none;
 41 }
 42 </style>
 43 </head>
 44 <body>
 45     <div id="img-up">
 46         <input type="file" id="uploadify" name="uploadify" />
 47         <div id="fileQueue">
 48         </div>
 49     </div>
 50     <div id="img-crop">
 51         <div id="img-prev-container">
 52             <img id="img-preview" />
 53         </div>
 54         <img id="img-uploadify" />
 55         <form action="/Crop/tryCrop" method="post">
 56         <input type="hidden" name="x" id="x" />
 57         <input type="hidden" name="y" id="y" />
 58         <input type="hidden" name="w" id="w" />
 59         <input type="hidden" name="h" id="h" />
 60         <input type="hidden" name="img" id="img" />
 61         <input type="submit" value="剪裁" />
 62         </form>
 63     </div>
 64 </body>
 65 </html>
 
JS
  1 <script type="text/javascript">
  2     $(function () {
  3         var jcrop_api, boundx, boundy;
  4
  5         function updateCoords(c) {
  6             $('#x').val(c.x);
  7             $('#y').val(c.y);
  8             $('#w').val(c.w);
  9             $('#h').val(c.h);
 10         };
 11         function updatePreview(c) {
 12             if (parseInt(c.w) > 0) {
 13                 /* 商必须与img-preview宽高一致*/
 14                 var rx = 200 / c.w;
 15                 var ry = 200 / c.h;
 16
 17                 $('#img-preview').css({
 18                     width: Math.round(rx * boundx) + 'px',
 19                     height: Math.round(ry * boundy) + 'px',
 20                     marginLeft: '-' + Math.round(rx * c.x) + 'px',
 21                     marginTop: '-' + Math.round(ry * c.y) + 'px'
 22                 });
 23             }
 24         };
 25
 26         $("#uploadify").uploadify({
 27             'uploader': 'http://www.cnblogs.com/Js/uploadify/uploadify.swf',
 28             'script': '/Crop/upload',
 29             'cancelImg': 'http://www.cnblogs.com/Js/uploadify/cancel.png',
 30             'folder': 'Images',
 31             'queueID': 'fileQueue',
 32             'auto': true,
 33             'buttonText': 'upload image',
 34             'queueSizeLimit': 1,
 35             'multi': false,
 36             'fileDesc': 'jpg,gif',
 37             'fileExt': '*.jpg;*.gif',
 38             'sizeLimit': '819200',
 39             'onComplete': function (event, queueID, fileObj, response, data) {
 40                 var result = eval('(' + response + ')');
 41                 if ('0' == result.id) {
 44                     $('#img-up').remove();
 47                     $('#img-crop').css("display", "block");
 48                     /* 绑定图片名称*/
 49                     var iname = (result.mess).substring((result.mess).lastIndexOf("/") + 1, (result.mess).length);
 50                     $('#img').val(iname);
 51                     /* 加载原始图片*/
 52                     $('#img-preview,#img-uploadify').attr("src", result.mess);
 53                     /* 加载剪裁插件*/
 54                     $('#img-uploadify').Jcrop({
 55                         onChange: updatePreview,
 56                         onSelect: updatePreview,
 57                         aspectRatio: 1,
 58                         onSelect: updateCoords,
 59                         setSelect: [0, 0, 200, 200]
 60                     }, function () {
 61                         var bounds = this.getBounds();
 62                         boundx = bounds[0];
 63                         boundy = bounds[1];
 64                         jcrop_api = this;
 65                     });
 66                 } else if ('1' == result.id) {
 67                     /* 异常信息提示*/
 68                     alert(result.mess)
 69                 }
 70             }
 71         });
 72     });  
 73 </script>
 
Controller
  1 public class CropController : Controller
  2     {
  3         public ActionResult Index()
  4         {
  5             return View();
  6         }
  7
  8         [HttpPost]
  9         public ActionResult upload(HttpPostedFileBase Filedata)
 10         {
 11             try
 12             {
 13                 Image image = Image.FromStream(Filedata.InputStream);
 14                 string ipath = Path.Combine("Images", Path.GetFileName(Filedata.FileName));
 15                 string spath = Path.Combine(HttpContext.Server.MapPath("~"), ipath);
 16                 image.Save(spath);
 17
 18                 return Json(new { id = "0", mess = string.Format("{0}{1}/{2}", BaseUrl, "Images", Filedata.FileName), iw = image.Width, ih = image.Height });
 19             }
 20             catch (Exception ex)
 21             {
 22                 return Json(new { id = "1", mess = ex.Message });
 23             }
 24         }
 25
 26         public void tryCrop(string img, int x, int y, int w, int h)
 27         {
 28             Image image = Image.FromFile(Path.Combine(HttpContext.Server.MapPath("~"), "Images", img));
 29             Crop(image, w, h, x, y).Save(Path.Combine(HttpContext.Server.MapPath("~"), "Images", "v" + img));
 30
 31             Response.Redirect(string.Format("{0}{1}/{2}", BaseUrl, "Images", "v" + img));
 32         }
 33
 34         [NonAction]
 35         public string BaseUrl
 36         {
 37             get
 38             {
 39                return Request.Url.Scheme + "://" + Request.Url.Authority + Request.ApplicationPath.TrimEnd('/') + '/';
 40             }
 41         }
 42
 43         [NonAction]
 44         public static Image Crop(Image image, int width, int height, int x, int y)
 45         {
 46             Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
 47             bmp.SetResolution(image.HorizontalResolution, image.VerticalResolution);
 48
 49             using (Graphics graphic = Graphics.FromImage(bmp))
 50             {
 51                 graphic.SmoothingMode = SmoothingMode.AntiAlias;
 52                 graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
 53                 graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
 54                 graphic.DrawImage(image, new Rectangle(0, 0, width, height), x, y, width, height, GraphicsUnit.Pixel);
 55             }
 56
 57             return bmp;
 58         }
 59     }
 
 
打完收工......
 
 
 
摘自  Yoer