基于jquery.Jcrop的头像编辑器


Posted in Javascript onMarch 01, 2010

用过新浪微博的朋友对它的头像编辑器都有印象吧.不过人家是用flash做的.
在一个项目中,也用到了同样的东西,本来想直接用新浪微博的,但它有一部分请求路径写到FLASH里面去了,所以只好放弃.
在网上找到了jquery.Jcrop,基本满足了我的需求,但它只是简单的切割而已,还有缩略图没有生成.或许有很多人都需要这类东西吧,于是我把它封装起来了,方便其它朋友直接使用.
官方网址:http://deepliquid.com/content/Jcrop.html
上面有很多demo,有兴趣的可以上去看看.
此文章中,封装的JS如下:

jQuery.UtrialAvatarCutter = function(config){ 
var h,w,x,y; 
var os,oh,ow; 
var api = null; 
var sel = this; 
var img_content_id = config.content; 
var img_id = "img_"+(Math.random()+"").substr(3,8); 
var purviews = new Array(); 
var select_width = null; 
var select_height = null; 
if(config.purviews){ 
for(i=0,c=config.purviews.length;i<c;++i){ 
purviews[purviews.length] = config.purviews[i]; 
} 
} 
check_thums_img = function(){ 
if(config.purviews){ 
for(i=0,c=config.purviews.length;i<c;++i){ 
if($('#'+config.purviews[i].id+" img").length==0){ 
$('#'+config.purviews[i].id).html("<img src='"+os+"'/>"); 
}else{ 
$('#'+config.purviews[i].id+" img").attr("src",os); 
} 
} 
} 
} 
/* 
* 重新加载图片 
*/ 
this.reload = function(img_url){ 
if(img_url!=null && img_url != ""){ 
os = img_url+"?"+Math.random(); 
$("#"+img_content_id).html("<img id='"+img_id+"' src='"+os+"'/>"); 
$("#"+img_id).bind("load", 
function(){ 
check_thums_img(); 
sel.init(); 
} 
); 
} 
} 
$("#"+img_content_id+" img").attr("id",img_id); 
var preview = function(c) { 
if ( c.w == 0 || c.h == 0 ) { 
api.setSelect([ x, y, x+w, y+h ]); 
api.animateTo([ x, y, x+w, y+h ]); 
return; 
} 
x = c.x; 
y = c.y; 
w = c.w; 
h = c.h; 
for(i=0,c=purviews.length;i<c;++i){ 
var purview = purviews[i]; 
var rx = purview.width / w; 
var ry = purview.height / h; 
$('#'+purview.id+" img").css({ 
width: Math.round(rx * ow) + 'px', 
height: Math.round(ry * oh) + 'px', 
marginLeft: '-' + Math.round(rx * x) + 'px', 
marginTop: '-' + Math.round(ry * y) + 'px' 
}); 
} 
} 
this.init = function(){ 
if(api!=null){ 
api.destroy(); 
} 
os = $("#"+img_content_id+" img").attr("src"); 
if(os=="") 
return; 
check_thums_img(); 
for(i=0,c=purviews.length;i<c;++i){ 
var purview = purviews[i]; 
var purview_content = $("#"+purview.id); 
purview_content.css({position: "relative", overflow:"hidden", height:purview.height+"px", width:purview.width+"px"}); 
} 
oh = $('#'+img_id).height(); 
ow = $('#'+img_id).width(); 
select_width = config.selector.width; 
select_height = config.selector.height; 
select_width = Math.min(ow,select_width); 
select_height = Math.min(oh,select_height); 
x = ((ow - select_width) / 2); 
y = ((oh - select_height) / 2); 
//这是原Jcrop配置,修改此处可修改Jcrop的其它各种功能 
api = $.Jcrop('#'+img_id,{ 
aspectRatio: 1, 
onChange: preview, 
onSelect: preview 
}); 
//设置选择框默认位置 
api.animateTo([ x, y, x+select_width, y+select_height ]); 
} 
this.submit = function(){ 
return {w:w,h:h,x:x,y:y,s:os}; 
} 
}

比较简单,不再多说
应用部分也非常简单
1. 导入必需的文件
代码
<LINK href="css/jquery.Jcrop.css" type="text/css" rel="Stylesheet" media="screen"> 
<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> 
<script type="text/javascript" src="js/jquery.Jcrop.min.js"></script> 
<script type="text/javascript" src="js/jQuery.UtrialAvatarCutter.js"></script>

2. 定义原始图片与缩略图的容器
代码
<!-- 
原始图 
--> 
<div id="picture_original"> 
<img src="http://static.youhuiduo.net/Attatchment/72383/600X600/634030306987187500.jpg"/> 
</div> 
<!--- 
缩略图 
--> 
<div id="picture_200"></div> 
<div id="picture_50"></div> 
<div id="picture_30"></div>

3. 配置
代码
var cutter = new jQuery.UtrialAvatarCutter( 
{ 
//主图片所在容器ID 
content : "picture_original", 
//缩略图配置,ID:所在容器ID;width,height:缩略图大小 
purviews : [{id:"picture_200",width:200,height:200},{id:"picture_50",width:50,height:50},{id:"picture_30",width:30,height:30}], 
//选择器默认大小 
selector : {width:200,height:200} 
} 
);

4. 触发
$(window).load(function(){ 
cutter.init(); 
});

5. 如果是使用ajax上传图片的,可以使用cutter.reload(imgs_url)即时修改图片路径
文件打包下载 https://3water.com/jiaoben/24767.html
Javascript 相关文章推荐
javascript parseInt 函数分析(转)
Mar 21 Javascript
JavaScript 提升运行速度之循环篇 译文
Aug 15 Javascript
javascript 语法基础 想学习js的朋友可以看看
Dec 16 Javascript
imgAreaSelect 中文文档帮助说明
Oct 08 Javascript
replace()方法查找字符使用示例
Oct 28 Javascript
javascript中setAttribute()函数使用方法及兼容性
Jul 19 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
Feb 25 Javascript
React简单介绍
May 24 Javascript
vue实现图片滚动的示例代码(类似走马灯效果)
Mar 03 Javascript
JavaScript 截取字符串代码实例
Sep 05 Javascript
LayUI数据接口返回实体封装的例子
Sep 12 Javascript
如何在vue中使用kindeditor富文本编辑器
Dec 19 Vue.js
IE event.srcElement和FF event.target 功能比较
Mar 01 #Javascript
Javascript 判断客户端浏览器类型代码
Mar 01 #Javascript
在chrome中window.onload事件的一些问题
Mar 01 #Javascript
仅用[]()+!等符号就足以实现几乎任意Javascript代码
Mar 01 #Javascript
Javascript 网页水印(非图片水印)实现代码
Mar 01 #Javascript
使用js获取QueryString的方法小结
Feb 28 #Javascript
JQuery 将元素显示在屏幕的中央的代码
Feb 27 #Javascript
You might like
PHP入门速成(2)
2006/10/09 PHP
浅谈php函数serialize()与unserialize()的使用方法
2014/08/19 PHP
php基于表单密码验证与HTTP验证用法实例
2015/01/06 PHP
PHP中is_file()函数使用指南
2015/05/08 PHP
PHP中$_SERVER使用说明
2015/07/05 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
Laravel如何同时连接多个数据库详解
2019/08/13 PHP
javascript得到XML某节点的子节点个数的脚本
2008/10/11 Javascript
javascript div 弹出可拖动窗口
2009/02/26 Javascript
Extjs ajax同步请求时post方式参数发送方式
2009/08/05 Javascript
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
jquery 圆形旋转图片滚动切换效果
2011/01/19 Javascript
Jquery Ajax的Get方式时需要注意URL地方
2011/04/07 Javascript
js原生态函数中使用jQuery中的 $(this)无效的解决方法
2011/05/25 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
2015/07/28 Javascript
javascript判断复选框是否选中的方法
2015/10/16 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
使用canvas进行图像编辑的实例
2017/08/29 Javascript
浅谈Koa服务限流方法实践
2017/10/23 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
2017/11/11 Javascript
[02:40]2014DOTA2 国际邀请赛中国区预选赛 四大豪门抵达华西村
2014/05/23 DOTA
Django实现简单网页弹出警告代码
2019/11/15 Python
Python输出指定字符串的方法
2020/02/06 Python
Python定时任务APScheduler安装及使用解析
2020/08/07 Python
Python3读写ini配置文件的示例
2020/11/06 Python
DHC中国官方购物网站:日本通信销售No.1化妆品
2016/08/20 全球购物
NBA欧洲商店(法国):NBA Europe Store FR
2016/10/19 全球购物
医药工作者的求职信范文
2013/09/21 职场文书
临床护理求职信
2014/04/26 职场文书
科技工作者先进事迹
2014/08/16 职场文书
小学校园广播稿(3篇)
2014/09/19 职场文书
2014乡镇班子个人对照检查材料思想汇报
2014/09/26 职场文书
信仰观后感
2015/06/03 职场文书
2016新党章学习心得体会
2016/01/15 职场文书
MybatisPlus EntityWrapper如何自定义SQL
2022/03/22 Java/Android
Linux中一对多配置日志服务器的详细步骤
2022/07/23 Servers