jQuery图片裁剪插件CropZoom使用方法与bug修复
图片裁剪功能大家看过最多的估计是以前dz论坛中的一个flash插件+php的裁剪功能了,像jquery图片裁剪功能了解的不多,其实此插件入门使用简单并且方便调整了,下面一起来看看CropZoom使用方法与bug修复方法吧.
非常不错的jQuery图片裁剪插件CropZoom,功能非常强大,可以旋转图片,改变图片显示比例,拖拽到指定区域进行裁剪,裁剪及时显示裁剪图片效果,绝对能满足你的需求,很适合头像图片裁剪方面的应用。
jQuery图片裁剪插件CropZoom
兼容性:兼容IE6+,fireFox2+,Opera,Safria,Chrome
使用方法:
1.加载JS,CSS文件
- <link href="css/jquery-ui-1.7.2.custom.css" rel="Stylesheet" type="text/css" />
- <style type="text/css">
- .crop{width:680px; margin:20px auto; border:1px solid #d3d3d3; padding:4px; background:#fff}
- #cropzoom_container{float:left; width:500px}
- #preview{float:left; width:150px; height:200px; border:1px solid #999; margin-left:10px; padding:4px; background:#f7f7f7;}
- .page_btn{float:right; width:150px; margin-top:20px; line-height:30px; text-align:center}
- .clear{clear:both}
- .btn{cursor:pointer}
- </style>
- <script type="text/javascript" src="js/jquery.js"></script>
- <script type="text/javascript" src="js/jquery-ui-1.8.custom.min.js"></script>
- <script type="text/javascript" src="js/jquery.cropzoom.js"></script>
2.书写HTML内容
- <div class="crop">
- <div id="cropzoom_container"></div>
- <div id="preview"><img id="generated" src="tmp/head.gif" /></div>
- <div class="page_btn">
- <input type="button" class="btn" id="crop" value="剪切照片" />
- <input type="button" class="btn" id="restore" value="照片复位" />
- </div>
- <div class="clear"></div>
- </div>
3.调用函数
- <script type="text/javascript">
- $(function() {
- var cropzoom = $('#cropzoom_container').cropzoom({
- width: 500,//DIV层宽度
- height: 360,//DIV层高度
- bgColor: '#ccc',//DIV层背景颜色
- enableRotation: true,//是否允许旋转图片true false
- enableZoom: true,//是否允许放大缩小
- selector: {
- w:150,//选择器宽度
- h:200,//旋转高度
- showPositionsOnDrag:true,//是否显示拖拽的位置洗洗脑
- showDimetionsOnDrag:false,
- centered: true,//居中
- bgInfoLayer:'#fff',
- borderColor: 'blue',//选择区域边框样式
- animated: false,
- maxWidth:150,//最大宽度
- maxHeight:200,//最大高度
- borderColorHover: 'yellow'//鼠标放到选择器的边框颜色
- },
- image: {
- source: '/focus19/images/b2.jpg',
- width: 450,//图片宽度
- height: 300,//图片高度
- minZoom: 30,//最小放大比例
- maxZoom: 150//最大放大比例
- }
- });
- $("#crop").click(function(){//裁剪提交
- cropzoom.send('resize_and_crop.php', 'POST', {}, function(imgRet) {
- $("#generated").attr("src", imgRet);
- });
- });
- $("#restore").click(function(){//显示初始状态照片
- $("#generated").attr("src", "tmp/head.gif");
- cropzoom.restore();
- });
- });
- </script>
以下是使用及改进笔记:
1、兼容问题修正
首先要说的是jQuery版本的兼容问题,由于1.9以上的jQuery不提供$.browser,所以如果你用的是1.9以上的jQuery版本,就需要在控件中找出所有 $.browser.msie 并替换成可用的判断。
- /*
- * IE浏览器版本
- */
- iechecker=false;
- if(navigator.appName == "Microsoft Internet Explorer"){
- iechecker=true;
- }
2、初始化方法(附上我自己对参数的注释)
该控件用到jquery-ui,所以除了jquery,还需要引入相关js和css(jquery-ui可自行在官网生成,需要resize,slider,dragdrop模块)
- <link type="text/css" rel="stylesheet" href="/stylesheets/jquery-ui.min.css"/>
- <script type="text/javascript" src="/javascripts/libs/jquery-1.9.1.min.js"></script>
- <script type="text/javascript" src="/javascripts/libs/jquery-ui.min.js"></script>
- $('#CropzoomContainer').cropzoom({
- width: 500, //整个容器尺寸-宽
- height: 375, //整个容器尺寸-高
- bgColor: '#000', //背景颜色
- overlayColor: '#000', //覆盖层颜色
- selector: {
- x:0, //裁剪框的位置-X轴(当centered属性为true时不可用)
- y:0, //裁剪框的位置-Y轴(当centered属性为true时不可用)
- w:229, //裁剪框的宽度
- h:100, //裁剪框的高度
- aspectRatio:false, //高宽比例固定
- centered:false, //裁剪框居中(为true时上面设置的x和y值将无效)
- borderColor: 'yellow',//裁剪框的边框颜色
- borderColorHover: 'red',//鼠标经过时裁剪框的边框颜色
- bgInfoLayer: '#FFF', //显示裁剪信息的背景颜色
- infoFontSize: 10, //显示裁剪信息的字体大小
- infoFontColor: 'blue',//显示裁剪信息的字体颜色
- showPositionsOnDrag: true,//拖动时显示位置信息
- showDimetionsOnDrag: true,//拖动时显示精度信息
- maxHeight:null, //允许裁剪框的最大高度
- maxWidth:null //允许裁剪框的最大宽度
- },
- image: {
- source:'', //原图片地址
- rotation:0, //默认旋转角度
- width:0, //原图显示在裁剪框中的宽度
- height:0, //原图显示在裁剪框中的高度
- minZoom:10, //最小允许缩放比例
- maxZoom:150 //最大允许缩放比例
- },
- enableRotation: true, //允许旋转
- enableZoom: true, //允许缩放
- enableResize: true, //允许改变裁剪框的大小(自定义参数,下面有改动说明)
- zoomSteps: 1, //缩放步距
- rotationSteps: 5, //旋转步距
- onSelectorDrag:null, //裁剪框拖动反馈函数
- onSelectorDragStop: null, //裁剪框拖放结束反馈函数
- onSelectorResize: null, //裁剪框改变大小反馈函数
- onSelectorResizeStop: null,//裁剪框改变大小结束反馈函数
- onZoom: null, //原图缩放反馈函数
- onRotate:null, //原图旋转反馈函数
- onImageDrag:null //原图拖动反馈函数
- });
3、自行加入参数,不允许改变裁剪框尺寸
第一步是在参数里加入enableResize参数(包括jquery.cropzoom.js中的default 和 上一步初始化中的定义)
第二步是在使用jquery-ui控件前根据参数判断是否跳过:
- if($options.enableResize){
- _selector.resizable({
- ...
- });
- }
4、修改 send 方法,在提交前判断裁剪尺寸是否合理
首先找到 send 方法,在参数获取完成后,进行范围判断;根据项目需求,我的判断标准是裁剪框内无空白部分,代码如下:
- if(params.imageX<=params.selectorX && params.imageY<=params.selectorY && params.imageX+params.imageW>=params.selectorX+params.selectorW && params.imageY+params.imageH>=params.selectorY+params.selectorH){
- //send
- }
- else{
- alert('裁剪范围内有空白部分');
- }
5、裁剪框误差修正(对7以下的低版本IE无效)
由于裁剪框的border是在预设的尺寸外加1px的框,所以视觉判断会产生误差,由于当前项目不考虚兼容ie7以下浏览器,所以可以通过简单地设置box-sizing即可解决这个问题。
找到 createSelector 方法,在cursor后面加入boxSizing 一项设置为 border-box:
- 'cursor':'move',
- 'boxSizing':'border-box'