头像裁剪是一个经常用到的功能,实现原理也较为简单,就是在本地选择好所需裁剪图片的坐标,将坐标发送到服务器,由服务器执行图片裁剪操作。
jQuery插件Jcrop提供了强大的图片裁剪坐标选择插件。一下来介绍它的用法。本处采用了AJAX本地上传一张图片的方法让用户裁剪。很多验证没有做,因为作为一个关于Jcrop的例子,很多验证不如与本文研究的范畴。服务器端采用MVC3实现。
直接贴代码,详解注释里面有了。
一、前台页面代码。
<link href="http://www.cnblogs.com/Content/jquery.Jcrop.css" rel="stylesheet" type="text/css" />
<script src="http://www.cnblogs.com/Content/jquery-1.7.1.js" type="text/javascript"></script>
<script src="http://www.cnblogs.com/Content/ajaxfileupload.js" type="text/javascript"></script>
<script src="http://www.cnblogs.com/Content/jquery.Jcrop.js" type="text/javascript"></script>
<script type="text/javascript">
$(function () {
$(":button").click(function () {
//当点击上传按钮时,AJAX上传图片到服务器
ajaxFileUpload();
})
})
//当裁剪框变动时,将左上角相对图片的X坐标与Y坐标,宽度以及高度放到<input type="hidden">中(上传到服务器上裁剪会用到)
function showCoords(c) {
$("#p1").text(c.x + " " + c.y + " " + c.w + " " + c.h );
$("#x1").val(c.x);
$("#y1").val(c.y);
$("#cw").val(c.w);
$("#ch").val(c.h);
}
//当AJAX上传图片操作
function ajaxFileUpload() {
$.ajaxFileUpload
(
{
url: '/uploadandcut/upload?action=up', //用于文件上传的服务器端请求地址up参数标记此次是上传操作还是裁剪操作
secureuri: false, //一般设置为false,是否安全上传
fileElementId: 'file1', //文件上传控件的id属性 <input type="file" id="file" name="file" />
dataType: 'json', //返回值类型 一般设置为json 期望服务器传回的数据类型
success: function (data, status) //服务器成功响应处理函数
{
//上传成功后在将服务器上刚刚上传的图片显示在img1上
$("#img1").attr("src", data.imgurl);
if (typeof (data.error) != 'undefined') {
if (data.error != '') {
alert(data.error);
} else {
alert(data.msg);
}
}
//同时启动裁剪操作,触发裁剪框显示,让用户选择图片区域
$("#img1").Jcrop({
bgColor: 'black',
bgOpacity: .4,
setSelect: [100, 100, 150,150], //设定4个角的初始位置
aspectRatio: 1 / 1,
onChange: showCoords, //当裁剪框变动时执行的函数
onSelect: showCoords, //当选择完成时执行的函数
});
},
error: function (data, status, e)//服务器响应失败处理函数
{
alert(e);
}
}
)
return false;
}
</script>
<div>
<p><input type="file" id="file1" name="file" /></p>
<input type="button" value="上传" />
<p><img id="img1" alt="上传成功啦!" src="" /></p>
<p id="p1"></p>
<form