ASP.NET MVC下使用SWFUpload完成剪切头像功能
首先介绍SWFUpload组件
![](https://images0.cnblogs.com/i/466188/201407/152111577564448.jpg)
var swfu;
window.onload = function () {
swfu = new SWFUpload({
// Backend Settings
upload_url: "/Image/upload", //提交上传的url
post_params: {
"ASPSESSID": "@Session.SessionID" //SessionID很重要,如果没有SessionID将无法上传,并且加载页面时Button都不会显示
},
// 上传文件设置
file_size_limit: "2 MB", //大小
file_types: "*.jpg",//格式
file_types_description: "JPG Images",
file_upload_limit: 0, // Zero means unlimited
//一系列事件 默认事件在Handler.js文件内
swfupload_preload_handler: preLoad,
swfupload_load_failed_handler: loadFailed,
file_queue_error_handler: fileQueueError,
file_dialog_complete_handler: fileDialogComplete,
upload_progress_handler: uploadProgress,//上传过程
upload_error_handler: uploadError,//上传异常
upload_success_handler: cutImage, //上传成功
upload_complete_handler: uploadComplete,
// Button样式相关设置
button_image_url: '@Url.Content("~/Content/js/swfuploadv250/images/XPButtonNoText_160x22.png")',
button_placeholder_id: "spanButtonPlaceholder",//Button按钮ID
button_width: 160,
button_height: 22,
button_text: '<span class="button">上传图片 <span class="buttonSmall">(2 MB Max)</span></span>',
button_text_style: '.button { font-family: Helvetica, Arial, sans-serif;color:red; font-size: 14pt; } .buttonSmall { font-size: 10pt; }',
button_text_top_padding: 1,
button_text_left_padding: 5,
// Flash文件(swfupload.swf) 路径设置
flash_url: '@Url.Content("~/Content/js/swfuploadv250/swfupload.swf")',
flash9_url: '@Url.Content("~/Content/js/swfuploadv250/swfupload_fp9.swf")',
custom_settings: {
upload_target: "divFileProgressContainer" //展示信息框 的id
},
// 是否开启调试
debug: false
});
Html
<body>
<div id="content">
aaabbb
<div id="swfu_container" style="margin: 0px 10px;">
<div>
<span id="spanButtonPlaceholder"></span>
</div>
<div id="divFileProgressContainer" style="height: 75px;"></div>
<div id="thumbnails"></div>
</div>
</div>
<div id="divImg" style="position:relative;overflow:hidden">
<div id="divCut" class="easyui-draggable" style="border:1px solid red;width:226px;height:198px;" data-options="onDrag:onDrag"></div>
</div>
<input type="button" value="头像截取" id="btnCut" />
<img id="cutImg" />
</body>
这时候页面效果
点击上传图片效果
控制器方法
public ActionResult Upload()
{
//获得上传数据
HttpPostedFileBase jpeg_image_upload = Request.Files["Filedata"];
//保存图片
string path = "../Images/temp.jpg";
jpeg_image_upload.SaveAs(Request.MapPath(path));
//获取图片大小
UploadImage.Models.ImageViewData imgViewModel = new Models.ImageViewData();
//取得上传图片流
using (System.Drawing.Image original_image = System.Drawing.Image.FromStream(jpeg_image_upload.InputStream))
{
imgViewModel.Path = path;
imgViewModel.Width = original_image.Width;
imgViewModel.Height = original_image.Height;
}
return Json(imgViewModel, JsonRequestBehavior.AllowGet);
}
//上传成功事件方法 上传相关信息 服务端返回的数据
function cutImage(file, serverData) {
var oJson = JSON.parse(serverData);
$("#divImg").css("backgroundImage", "url(" + oJson.Path + ")").css("width", oJson.Width + "px").css("height", oJson.Height + "px");
imgUrl = oJson.Path;
}
var imgUrl = "";
这是回调函数里的file参数信息,能用到的比较少。
creationdate: Wed Apr 09 2014 15:17:50 GMT+0800 (中国标准时间)
filestatus: -4
id: "SWFUpload_0_0"
index: 0
modificationdate: Thu Feb 27 2014 11:37:30 GMT+0800 (中国标准时间)
name: "1e6b388f8a513a5d6464f0b722e663aa.jpg"
post: Object
size: 101205
type: ".jpg"
uploadtype: 0
__proto__: Object
![](https://images0.cnblogs.com/i/466188/201407/152121350683777.png)
//截图图片
$("#btnCut").click(function () {
var $cut = $("#divCut");
var $divImg = $("#divImg");
var x = $cut.offset().left-$divImg.offset().left; //横坐标
var y = $cut.offset().top-$divImg.offset().left;//纵坐标
var width = $cut.width();//宽度
var height = $cut.height();//高度
//发送数据到服务端
$.post("/Image/ImageCut", { "x": parseInt(x), "y": parseInt(y), "width": parseInt(width), "height": parseInt(height), "imgUrl": imgUrl },
function (data) { $("#divImg").hide();
$("#cutImg").attr("src", data);
})
})
服务端代码
public ActionResult ImageCut(FormCollection form)
{
//1:接受参数
int x = int.Parse(form["x"]);
int y = int.Parse(form["y"]);
int width = int.Parse(form["width"]);
int height = int.Parse(form["height"]);
string imgUrl = form["imgUrl"];
string imgPath = string.Empty;
using (Bitmap map = new Bitmap(width, height))//创建图片的大小与要截取图像的大小一致
{
using (Graphics g = Graphics.FromImage(map))
{
//将之前上传的图片转成Image
using (Image img = Image.FromFile(Request.MapPath(imgUrl)))
{
// 操作的图, 要画大小, 画哪一块, 度量单位
g.DrawImage(img, new Rectangle(, , width, height), new Rectangle(x, y, width, height), GraphicsUnit.Pixel);
imgPath = "../Images/cuttemp.jpg";
map.Save(Request.MapPath(imgPath));//将BitMap保存
}
}
}
return Content(imgPath);
}
ASP.NET MVC下使用SWFUpload完成剪切头像功能的更多相关文章
- ASP.NET MVC下的四种验证编程方式[续篇]
在<ASP.NET MVC下的四种验证编程方式>一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式("手工验证"."标注Validation ...
- ASP.NET MVC下的四种验证编程方式
ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效性,我们将针对参数的验证成为Model绑定 ...
- Response.End()在Webform和ASP.NET MVC下的表现差异
前几天在博问中看到一个问题--Response.End()后,是否停止执行?MVC与WebForm不一致.看到LZ的描述后,虽然奇怪于为何用Response.End()而不用return方式去控制流程 ...
- ASP.NET MVC下的四种验证编程方式[续篇]【转】
在<ASP.NET MVC下的四种验证编程方式> 一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验证”.“标注ValidationAttribute特性”.“ ...
- ASP.NET MVC下的四种验证编程方式【转】
ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效 性,我们将针对参数的验证成为Model绑 ...
- ASP.NET MVC下使用AngularJs语言(六):获取下拉列表的value和Text
前面Insus.NET有在Angularjs实现DropDownList的下拉列表的功能.但是没有实现怎样获取下拉列表的value和text功能. 下面分别使用ng-click和ng-change来实 ...
- ASP.NET MVC下使用AngularJs语言(五):ng-selected
这次学习ng-selected语法,这个是为DropDownList下拉列表显示默认选项. 演示从下面步骤开始 1,新建一个model: 上面#14行代码的property,数据类型为bool.即是存 ...
- ASP.NET MVC下使用AngularJs语言(二):ng-click事件
程序用户交互,用户使用mouse点击,这是一个普通的功能. 在angularjs的铵钮点击命令是ng-click. 创建Angularjs的app使用前一篇<ASP.NET MVC下使用Angu ...
- ASP.NET MVC下使用AngularJs语言(一):Hello your name
新春节后,分享第一个教程. 是教一位新朋友全新学习ASP.NET MVC下使用AngularJs语言. 一,新建一个空的Web项目.使用NuGet下载AngularJs和jQuery.二,配置Bund ...
随机推荐
- [opencv bug] orb flannBaseMatcher Exception
when i use flannBaseMathcer to match 2 sets of orb descriptor, it occured an exception : unsigned lo ...
- IOSruntime : 运行时机制
首先必须明白的: 1.是什么 1> runtime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API 2> 平时编写的OC代码, 在程序运行过程中, 其实最 ...
- MyEclipse7.0 M1下载和注册码
首先介绍下,这款MyEclipse7.0 M1已经内置了Eclipse3.4,所以无需再去下载. 1.下载地址: http://downloads.myeclipseide.com/downloads ...
- UVALive 4329 Ping pong (BIT)
枚举中间的人,只要知道在这个人前面的技能值比他小的人数和后面技能值比他小的人数就能计算方案数了,技能值大的可有小的推出. 因此可以利用树状数组,从左到右往树上插点,每个点询问sum(a[i]-1)就是 ...
- Android(java)学习笔记124:利用Service在后台播放背景音乐
1. 在android应用程序里,有一种没有UI的类(android.app.Service)——Service.简单来说,Service是一个 background process(背景程序),通过 ...
- 10分钟搞懂toString和valueOf函数(详细版)
首先要说明的是这两种方法是toPrimitive抽象操作里会经常用到的. 默认情况下,执行这个抽象操作时会先执行valueOf方法,如果返回的不是原始值,会继续执行toString方法,如果返回的还不 ...
- 利用Python的pyHook包来进行键盘监听
最近在实习的时候发现一件很蛋疼的事情,那就是我们组的项目因为有后台进程,所有每次运行完以后后台进程都必须要自己手动关闭,每次编译之前忘记关就会有一大堆编译错误,我就想直接弄个可以快捷键直接关闭算了 ...
- 学习jQuery的免费资源:电子书、视频、教程和博客
jQuery毫无疑问是目前最流行的JavasScript库.排名最前的网站中70%使用了jQuery,并且jQuery也成为了Web开发的标准.如果你想找Web开发方面的工作,了解jQuery会大大的 ...
- 51nod——2504 是子序列的个数(一看就会的序列自动机原理)
还以为序列自动机是什么,写完无意间看到帖子原来这就是序列自动机……这算自己发现算法
- 【dp】P1982 小朋友的数字
有趣的细节题目 题目描述 有 n 个小朋友排成一列.每个小朋友手上都有一个数字,这个数字可正可负.规定每个小朋友的特征值等于排在他前面(包括他本人)的小朋友中连续若干个(最少有一个)小朋友手上的数字之 ...