基于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 相关文章推荐
Open and Print a Word Document
Jun 15 Javascript
js预载入和JavaScript Image()对象使用介绍
Aug 28 Javascript
获取中文字符串的实际长度代码
Jun 05 Javascript
Javascript中For In语句用法实例
May 14 Javascript
js闭包引起的事件注册问题介绍
Mar 29 Javascript
AngularJS 工作原理详解
Aug 18 Javascript
jquery根据一个值来选中select下的option实例代码
Aug 29 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
Dec 02 Javascript
Vue-cli项目获取本地json文件数据的实例
Mar 07 Javascript
支付宝小程序tabbar底部导航
Nov 06 Javascript
webpack的tree shaking的实现方法
Sep 18 Javascript
jQuery使用jsonp实现百度搜索的示例代码
Jul 08 jQuery
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小经验:解析preg_match与preg_match_all 函数
2013/06/29 PHP
PHP的伪随机数与真随机数详解
2015/05/27 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
yii2使用gridView实现下拉列表筛选数据
2017/04/10 PHP
PHP静态延迟绑定和普通静态效率的对比
2017/10/20 PHP
JavaScript 序列化对象实现代码
2009/12/18 Javascript
使用javascript过滤html的字符串(注释标记法)
2013/07/08 Javascript
jQuery ajax dataType值为text json探索分享
2013/09/23 Javascript
jquery 日期控件datepicker属性详细解析
2013/11/08 Javascript
如何防止JavaScript自动插入分号
2015/11/05 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
2016/11/07 Javascript
微信小程序 获取相册照片实例详解
2016/11/16 Javascript
正则 js分转元带千分符号详解
2017/03/08 Javascript
vue-router启用history模式下的开发及非根目录部署方法
2018/12/23 Javascript
elementUI table表格动态合并的示例代码
2019/05/15 Javascript
vue实现抽屉弹窗效果
2020/11/15 Javascript
[02:36]DOTA2英雄基础教程 一击致命幻影刺客
2013/12/06 DOTA
Python标准库之多进程(multiprocessing包)介绍
2014/11/25 Python
python列表生成式与列表生成器的使用
2018/02/23 Python
详解基于python的多张不同宽高图片拼接成大图
2019/09/26 Python
python保留小数位的三种实现方法
2020/01/07 Python
Python Web项目Cherrypy使用方法镜像
2020/11/05 Python
美国最好的钓鱼、狩猎和划船装备商店:Bass Pro Shops
2018/12/02 全球购物
Europcar意大利:汽车租赁
2019/07/07 全球购物
物流仓管员岗位职责
2013/12/04 职场文书
会计系中文个人求职信
2013/12/24 职场文书
小学敬老月活动方案
2014/02/11 职场文书
青年文明号口号
2014/06/17 职场文书
公共场所标语
2014/06/30 职场文书
人事文员岗位职责
2015/02/04 职场文书
催款函范本大全
2015/06/24 职场文书
2016年“11.11”光棍节活动总结
2016/04/05 职场文书
如何用JavaScript学习算法复杂度
2021/04/30 Javascript
MySQL 使用索引扫描进行排序
2021/06/20 MySQL
Pyqt5将多个类组合在一个界面显示的完整示例
2021/09/04 Python
Go中使用gjson来操作JSON数据的实现
2022/08/14 Golang