基于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 相关文章推荐
JS 进度条效果实现代码整理
May 21 Javascript
js实现千分符和保留几位小数的简单实例
Aug 01 Javascript
浅析Node.js:DNS模块的使用
Nov 23 Javascript
使用vue.js编写蓝色拼图小游戏
Mar 17 Javascript
JavaScript数据结构中串的表示与应用实例
Apr 12 Javascript
详解使用React全家桶搭建一个后台管理系统
Nov 04 Javascript
Node.js 使用jade模板引擎的示例
May 11 Javascript
JavaScript使用递归和循环实现阶乘的实例代码
Aug 28 Javascript
Vue中保存数据到磁盘文件的方法
Sep 06 Javascript
Vue基础学习之项目整合及优化
Jun 02 Javascript
微信小程序wxs实现吸顶效果
Jan 08 Javascript
在vue中动态修改css其中一个属性值操作
Dec 07 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+JS无限级可伸缩菜单详解(简单易懂)
2007/01/02 PHP
php中文验证码实现示例分享
2014/01/12 PHP
php版淘宝网查询商品接口代码示例
2014/06/17 PHP
php实现通过ftp上传文件
2015/06/19 PHP
php用正则判断是否为数字的方法
2016/03/25 PHP
javascript 添加和移除函数的通用方法
2009/10/20 Javascript
基于JQuery的多标签实现代码
2012/09/19 Javascript
js实现模拟银行卡账号输入显示效果
2015/11/18 Javascript
Bootstrap每天必学之折叠(Collapse)插件
2016/04/25 Javascript
详解Node.js模块间共享数据库连接的方法
2016/05/24 Javascript
js利用appendChild对标签进行排序的实现方法
2016/10/16 Javascript
Bootstrap媒体对象学习使用
2017/03/07 Javascript
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
vue绑定事件后获取绑定事件中的this方法
2018/09/15 Javascript
微信小程序实现自动定位功能
2018/10/31 Javascript
微信内置浏览器图片查看器的代码实例
2019/10/08 Javascript
Vue程序化的事件监听器(实例方案详解)
2020/01/07 Javascript
CentOS 8.2服务器上安装最新版Node.js的方法
2020/12/16 Javascript
Python中IPYTHON入门实例
2015/05/11 Python
利用python编写一个图片主色转换的脚本
2017/12/07 Python
PyQt5每天必学之弹出消息框
2018/04/19 Python
Python面向对象之Web静态服务器
2019/09/03 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
利用Python计算KS的实例详解
2020/03/03 Python
Python 读取xml数据,cv2裁剪图片实例
2020/03/10 Python
Python利用PyPDF2库获取PDF文件总页码实例
2020/04/03 Python
django的autoreload机制实现
2020/06/03 Python
韩国爱茉莉太平洋化妆品美国站:Amore Pacific US
2016/10/28 全球购物
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
个人综合鉴定材料
2014/05/23 职场文书
领导班子作风建设年个人整改措施
2014/09/29 职场文书
暑假社会实践证明格式
2014/10/28 职场文书
酒店辞职信怎么写
2015/02/27 职场文书
20180830晚上第一届KSL半决赛 雨神vs解冻(二龙 三炮解说)
2022/04/01 星际争霸
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技
spring boot实现文件上传
2022/08/14 Java/Android