基于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拆分字符串时产生空字符的解决方案
Sep 26 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
Feb 24 Javascript
使用RequireJS优化JavaScript引用代码的方法
Jul 01 Javascript
jQuery实现类似淘宝网图片放大效果的方法
Jul 08 Javascript
javascript实现不同颜色Tab标签切换效果
Apr 27 Javascript
AngularJS ng-mousedown 指令
Aug 02 Javascript
JavaScript 中有关数组对象的方法(详解)
Aug 15 Javascript
js实现table添加行tr、删除行tr、清空行tr的简单实例
Oct 15 Javascript
使用socket.io实现简单聊天室案例
Jan 02 Javascript
微信小程序之批量上传并压缩图片的实例代码
Jul 05 Javascript
详解Vue的钩子函数(路由导航守卫、keep-alive、生命周期钩子)
Jul 24 Javascript
Vue-router 切换组件页面时进入进出动画方法
Sep 01 Javascript
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 文本文件的读取效率
2012/02/10 PHP
yii2.0实现验证用户名与邮箱功能
2015/12/22 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
PHP的PDO预处理语句与存储过程
2019/01/27 PHP
一些不错的js函数ajax
2008/08/20 Javascript
JQuery datepicker 使用方法
2011/05/20 Javascript
检测jQuery.js是否已加载的判断代码
2011/05/20 Javascript
另一个javascript小测验(代码集合)
2011/07/27 Javascript
javascript中关于&amp;&amp; 和 || 表达式的小技巧分享
2015/04/10 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
jQuery+css3实现Ajax点击后动态删除功能的方法
2015/08/10 Javascript
喜大普奔!jQuery发布 3.0 最终版
2016/06/12 Javascript
JavaScript高仿支付宝倒计时页面及代码实现
2016/10/21 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
2017/02/21 Javascript
浅谈Vue.nextTick 的实现方法
2017/10/25 Javascript
zTree树形菜单交互选项卡效果的实现方法
2017/12/25 Javascript
javascript实现一款好看的秒表计时器
2020/09/05 Javascript
基于postman获取动态数据过程详解
2020/09/08 Javascript
[02:08]2018年度CS GO枪械皮肤设计大赛优秀作者-完美盛典
2018/12/16 DOTA
Python操作列表之List.insert()方法的使用
2015/05/20 Python
python迭代器与生成器详解
2016/03/10 Python
基础的十进制按位运算总结与在Python中的计算示例
2016/06/28 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
2017/07/28 Python
Django 前后台的数据传递的方法
2017/08/08 Python
python进程管理工具supervisor的安装与使用教程
2017/09/05 Python
python二维列表一维列表的互相转换实例
2018/07/02 Python
Python正则匹配判断手机号是否合法的方法
2020/12/09 Python
python  文件的基本操作 菜中菜功能的实例代码
2019/07/17 Python
Sarenza德国:法国最大的时尚鞋和包包网上商店
2019/06/08 全球购物
沃尔玛旗下墨西哥超市:Bodega Aurrera
2020/11/13 全球购物
为什么会有内存对齐
2016/10/10 面试题
毕业求职自荐信格式是什么
2013/11/19 职场文书
在校学生职业规划范文
2014/01/08 职场文书
2016年感恩教师节校园广播稿
2015/12/18 职场文书
导游词之山东八大关
2019/12/18 职场文书
Python加密与解密模块hashlib与hmac
2022/06/05 Python