使用了两个插件
1.文件上传插件uploadify
2.图像编辑插件jquery.Jcrop
基于Asp.net的mvc设计模式,设计了该插件
下面贴代码:
view(.cshtml):
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<link href="~/Bootstrap/jquery.Jcrop.min.css" rel="stylesheet" />
<link href="~/Bootstrap/uploadify.css" rel="stylesheet" />
@{
ViewBag.Title = "上传头像";
}
</head>
<div class="content animate-panel">
<div class="row">
<div class="col-lg-12">
<div class="hpanel">
<div class="panel-heading">
修改头像
</div>
<div class="panel-body">
<img id="img-uploadify" src=‘~/Res/@(User.Identity.Name)Portrait.jpg‘ class="center-block">
<div id="img-up" class="pull-left">
<input type="file" id="uploadify" name="uploadify" />
<div id="fileQueue">
</div>
</div>
<div id="img-crop" class="pull-right ">
@*<div id="img-prev-container">
<img class="img-circle m-b " id="img-preview" />
</div>*@
<div>
<form action="/Account/tryCrop" method="post" onsubmit="return checkCoords()">
<input type="hidden" name="x" id="x" />
<input type="hidden" name="y" id="y" />
<input type="hidden" name="w" id="w" />
<input type="hidden" name="h" id="h" />
<input type="hidden" name="img" id="img" />
<input type="submit" value="保存为头像" class="btn btn-success" />
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@section Scripts {
<script src="~/Bootstrap/jquery.uploadify.js"></script>
<script src="~/Bootstrap/jquery.Jcrop.min.js"></script>
<script>z`
var boundx;
var boundy;
function updateCoords(c) {
$(‘#x‘).val(c.x);
$(‘#y‘).val(c.y);
$(‘#w‘).val(c.w);
$(‘#h‘).val(c.h);
};
function checkCoords() {
if (parseInt($(‘#w‘).val())) {
return true;
};
alert(‘请先选择要裁剪的区域后,再提交。‘);
return false;
};
function updatePreview(c) {
if (parseInt(c.w) > 0) {
/* 商必须与img-preview宽高一致 */
c.w;
c.h;
$(‘#img-preview‘).css({
width: ‘96px‘,
height: ‘96px‘,
});
}
};
$("#uploadify").uploadify({
‘swf‘: ‘/Bootstrap/uploadify.swf‘,
‘uploader‘: ‘/Account/Upload‘, //图片上传的action方法
‘buttonClass‘: ‘btn btn-success ‘,
‘folder‘: ‘Images‘,
‘queueID‘: ‘fileQueue‘,
‘auto‘: true,
‘buttonText‘: ‘上传图片‘,
‘queueSizeLimit‘: 1,
‘multi‘: false,
‘fileTypeDesc‘: ‘jpg,png‘,
‘fileTypeExts‘: ‘*.jpg;*.png‘,
‘fileSizeLimit‘: ‘1MB‘,
‘onUploadSuccess‘: function (file, data, response) {
var result = eval(‘(‘ + data + ‘)‘);
if (‘0‘ == result.id) {
$(‘#img-crop‘).css("display", "block");
/* 绑定图片名称 */
var iname = (result.mess).substring((result.mess).lastIndexOf("/") + 1, (result.mess).length);
$(‘#img‘).val(result.mess);
/* 加载原始图片 */
$(‘#img-preview,#img-uploadify‘).attr("src", result.mess);
/* 加载剪裁插件 */
$(‘#img-uploadify‘).Jcrop({
onChange: updatePreview,
onSelect: updatePreview,
aspectRatio: 1,
onSelect: updateCoords,
setSelect: [0, 0, 100, 100]
}, function () {
var bounds = this.getBounds();
boundx = bounds[0];
boundy = bounds[1];
jcrop_api = this;
});
} else if (‘1‘ == result.id) {
/* 异常信息提示 */
alert(result.mess)
}
}
});
</script>
}
<style>
.jcrop-holder {
display: block;
margin-right: auto;
margin-left: auto;
}
</style>
controller:
public ActionResult UploadPortrait()
{
return View();
}
[HttpPost]
public ActionResult upload(HttpPostedFileBase Filedata)
{
try
{
Image image = Image.FromStream(Filedata.InputStream);
string ipath = Path.Combine("Images", Path.GetFileName(Filedata.FileName));
string spath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, ipath);
image.Save(spath);
return Json(new { id = "0", mess = string.Format("{0}{1}/{2}", BaseUrl, "Images", Filedata.FileName), iw = image.Width, ih = image.Height });
}
catch (Exception ex)
{
return Json(new { id = "1", mess = ex.Message });
}
}
public ActionResult tryCrop(string img, int x, int y, int w, int h)
{
var imgPath = img.Split(‘/‘);
Image image = Image.FromFile(Path.Combine(HttpContext.Server.MapPath("~"), "Images", imgPath[imgPath.Count() - 1]));
Crop(image, w, h, x, y).Save(Path.Combine(HttpContext.Server.MapPath("~"), "Res", User.Identity.Name + "Portrait.jpg"));
return RedirectToAction("Example", "Account");
}
public string BaseUrl
{
get
{
return Request.Url.Scheme + "://" + Request.Url.Authority + Request.ApplicationPath.TrimEnd(‘/‘) + ‘/‘;
}
}
[NonAction]
public static Image Crop(Image image, int width, int height, int x, int y)
{
Bitmap bmp = new Bitmap(96, 96, PixelFormat.Format24bppRgb);
bmp.SetResolution(image.HorizontalResolution, image.VerticalResolution);
using (Graphics graphic = Graphics.FromImage(bmp))
{
graphic.SmoothingMode = SmoothingMode.AntiAlias;
graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphic.DrawImage(image, new Rectangle(0, 0, 96, 96), x, y, width, height, GraphicsUnit.Pixel);
}
return bmp;
}
原文:http://www.cnblogs.com/chy386/p/6812473.html