利用jquery的imgAreaSelect插件实现图片裁剪示例

利用jquery的imgAreaSelect插件实现图片裁剪示例

将用户上传的图片进行裁剪再保存是现在web2.0应用中常常处理的工作,现在借助jquery的imgareaselect插件再配合PHP的GD库就可以轻松的实现这个在以前来说非常棘手的功能。我们来看看它的实现步骤:

1、包含进CSS文件(imgareaselect-default.css)和 jquery.imgareaselect.js文件

2、html代码(要裁剪的图片元素)

<img id="selectbanner" src="/pic/banner.jpg" />

3、imgAreaSelect的数据操作

$('#selectbanner').imgAreaSelect({ selectionColor: 'blue', x1:0, y1:0, x2: 950, 
maxWidth:950,minWidth:950,y2:400,minHeight:400,maxHeight:400, 
selectionOpacity: 0.2 , onSelectEnd: preview });

这样即可在该图片元素中使用裁剪功能了,当选框确定之后我们要保存被选择的图片还得自己写代码来操作。下面是当确定好图片区域后点击一个裁剪按钮后的操作:

//裁剪确认操作
$("#sliceButton").click(function() {
var pic = $('#selectbanner').attr('src');  
 var x,y,w,h;
 $.post(   "/template/sliceBanner",   {    x:$('#selectbanner').data('x'),    y:$('#selectbanner').data('y'),    w:$('#selectbanner').data('w'),    h:$('#selectbanner').data('h'),    pic:pic
  },   function(data){    //把裁剪后图片加载到原处    if(data){     $('#selectbanner').attr(pic);    }   }  );
});
//设置选取框的选取信息

//利用jquery中的data方法来保存生成的数据

function preview(img, selection) {
 $('#selectbanner').data('x',selection.x1);
 $('#selectbanner').data('y',selection.y1);
 $('#selectbanner').data('w',selection.width);
 $('#selectbanner').data('h',selection.height);

}

4、PHP端的主要代码:

//利用GD库来作裁剪操作

function sliceBanner(){
 $x = (int)$_POST['x'];  $y = (int)$_POST['y'];  $w = (int)$_POST['w'];  $h = (int)$_POST['h'];  $filename = trim($_POST['pic']);  if(isset($filename) ){   $uploadBanner =  '/temp'. $filename;   $sliceBanner = 'upload/'. $filename;   $src_pic = getImageHander($uploadBanner);   if(!$src_pic){    echo 0;exit;   }
  $dst_pic = imagecreatetruecolor($w, $h);   imagecopyresampled($dst_pic, $src_pic, 0, 0, $x, $y, $w, $h, $w, $h);
  imagejpeg($dst_pic, $sliceBanner);
  imagedestroy($src_pic);
  imagedestroy($dst_pic);
  echo 1;exit;  }  echo 0 ;exit;
}
function getImageHander ($url) {
 $size=@getimagesize($url);
 switch($size['mime']){
  case 'image/jpeg': $im = imagecreatefromjpeg($url);break;   case 'image/gif' : $im = imagecreatefromgif($url);break;   case 'image/png' : $im = imagecreatefrompng($url);break;   default: $im=false;break;  }
 return $im;
}

1、介绍 
ImgAreaSelect是一jQuery插件,它支持用户通过鼠标拖曳选择图片的一部分,非常的fashion。另外,可以在这个选择图像区域的基础上应用网站的其他一些技术,比如图片拖曳、图片编辑等。 
2、基本用法 
这个插件基于jQuery上通过imgAreaSelect()方法来调用,它操作的对象是HTML中利用jquery的imgAreaSelect插件实现图片裁剪示例元素内的图像。

复制代码 代码如下:
 


如果在jQuery对象里有不止有一个img元素,那么这个插件会对里面的元素逐个应用此方法。其实这个方法不仅仅应用于img元素,它支持任何块级元素(比如有图像背景的div元素)。 
与其它jQuery插件相似,这个插件可以在$(document).ready() 或者 $(window).load()句柄中初始化。 
3、选项 
用户在这个插件的很多方面都可以进行定制,用户通过插件选项来达到这个目的(这些选项会在插件初始化的时候起效)。这些选项包括:

选项

描述

aspectRatio

长宽比,以后在选择时候就会维持不变。

e.g. "4:3"

autoHide

如果设为true,那么在选择完后区域会消失。

Default:false

classPrefix

预先给插件元素的前缀(详见下面:5、元素与类)

Default:imgareaselect

disable

如果设置成true,这个插件将不起作用(但是图像还是可见的)

enable

如果设置成true,这个插件又将重新起作用

fadeSpeed

若设置成大于零的某个数,将"渐隐/渐现"这个插件

Default:true

handles

若设置成true,在改变大小的时候显示改变框(就是角点有些小"矩形")

Default:false

hide

若设置成true,则隐藏选择框

imageHeight

图像的真实高度(因为有可能被CSS缩放过了)

imageWidth

图像的真实宽度(因为有可能被CSS绽放过了)

instance

若设为true,imgAreaSelect()函数会返回一个对选择区域图像的一个引用,以便能够进一步使用API。(详见8、API方法)

keys

启用/关闭键盘支持(详见7、键盘支持)

Default:false

maxHeight

限制选择框(以像素为单位),设置最大、最小的高度、宽度。

maxWidth

minHeight

minWidth

movable

设置是否支持选择框移动

Default:true

parent

指定此插件默认所附加到的父元素

Default:body

persistent

若设置成true,点击选择区域外将开始一个新的选项(换言之,是否让用户只能移动/缩放选择区域)

Default:false

remove

若设置成true,则该插件将完全移除

resizable

决定选择区域是否可以改变大小

Default:true

resizeMargin

当选择区域宽度超过多少像素时将启用"可改变大小"模式

show

如果设置成true,选择区域将可见

x1

y1

初始化时选择框左上角的坐标

x2

y2

初始化时选择框右下角的坐标

zIndex

设置此插件所作用元素的z-index的值,一般情况下,imgAreaSelect 总是可以自动计算出它的值,但是极少数情况下还是有必要设置的。

onInit

当插件初始化时所调用的函数(详见6、回调函数)

onSelectStart

当开始选择时所调用的函数(详见6、回调函数)

onSelectChange

当改变选择区域时所调用的函数(详见6、回调函数)

onSelectEnd

当选择结束时所调用的函数(详见6、回调函数)

4、样式表 

 

 

 

 

然后在初始化imgAreaSelect时,使用onSelectEnd()回调函数将选择后的数据赋给这些隐藏域,正如下面代码那样:

 

$(document).ready(function () {

 

$('#ladybug').imgAreaSelect({

 

onSelectEnd: function (img, selection) {

 

$('input[name="x1"]').val(selection.x1);

 

$('input[name="y1"]').val(selection.y1);

 

$('input[name="x2"]').val(selection.x2);

 

$('input[name="y2"]').val(selection.y2);

 

}

 

});

 

});

这样当点击"submit按钮"时,页面将上载到服务器,如果使用PHP的话,使用$_POST['x1']等就得到相应的坐标数据了

 

来源:http://blog.sina.com.cn/s/blog_70a3539f01018jdl.html

posted @ 2015-06-27 09:23  Zoe_only  阅读(277)  评论(0编辑  收藏  举报