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

使用技术:Asp.net MVC与jquery.uploadify,Jcrop

首先上页面

01<strong><!DOCTYPE html>
02 <html>
03 <head>
04     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
05     <title>Index</title>
06     <link href="http://www.cnblogs.com/CSS/base.css" rel="stylesheet" type="text/css"/>
07     <script src="http://www.cnblogs.com/Js/jquery-1.7.1.min.js"type="text/javascript"></script>
08     <script src="http://www.cnblogs.com/Js/uploadify/swfobject.js"type="text/javascript"></script>
09     <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></strong>

JS

01<script type="text/javascript">
02     $(function () {
03         var jcrop_api, boundx, boundy;
04  
05         function updateCoords(c) {
06             $('#x').val(c.x);
07             $('#y').val(c.y);
08             $('#w').val(c.w);
09             $('#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) {
42                     $('#img-up').remove();
43                     $('#img-crop').css("display""block");
44                     /* 绑定图片名称 */
45                     variname = (result.mess).substring((result.mess).lastIndexOf("/") + 1, (result.mess).length);
46                     $('#img').val(iname);
47                     /* 加载原始图片 */
48                     $('#img-preview,#img-uploadify').attr("src", result.mess);
49                     /* 加载剪裁插件 */
50                     $('#img-uploadify').Jcrop({
51                         onChange: updatePreview,
52                         onSelect: updatePreview,
53                         aspectRatio: 1,
54                         onSelect: updateCoords,
55                         setSelect: [0, 0, 200, 200]
56                     }, function () {
57                         var bounds = this.getBounds();
58                         boundx = bounds[0];
59                         boundy = bounds[1];
60                         jcrop_api = this;
61                     });
62                 else if ('1' == result.id) {
63                     /* 异常信息提示 */
64                     alert(result.mess)
65                 }
66             }
67         });
68     });   
69 </script>
01public class CropController : Controller
02     {
03         public ActionResult Index()
04         {
05             return View();
06         }
07  
08         [HttpPost]
09         public ActionResult upload(HttpPostedFileBase Filedata)
10         {
11             try
12             {
13                 Image image = Image.FromStream(Filedata.InputStream);
14                 stringipath = 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, newRectangle(0, 0, width, height), x, y, width, height, GraphicsUnit.Pixel);
55             }
56  
57             return bmp;
58         }
59     }

转自:http://www.cnblogs.com/yoer/archive/2012/02/18/asp_net_mvc_image_upload_crop.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值