jQuery 图片剪裁插件使用之 imgAreaSelect

插件主页:http://odyniec.net/projects/imgareaselect/

官方网站上说明支持的浏览器:The plugin works in all major browsers, including Firefox 2+, Opera 9.5+, Google Chrome, Safari 3+, and Internet Explorer 6+.

插件的主要功能包括:

1. 可以选取固定比例 或 任意比例的选区

2. 可以设置选区的长宽最大最小限值

3. 可以设默认显示初始选区

4. 可以用鼠标移动选区的位置,不能移出原始图片的范围

5. 可以用鼠标对选区进行缩放 ( 鼠标按住8个点 ( handles: true ) 其中1点不放移动:左上、左、左下、右上、右、右下 ) 

6. 可以显示选区预览图

7. 可以显示选区的各点 ( 左上和右下 ) 坐标和长度与宽度

 

下载的插件包大小 56.4 k,插件包中不含 demo,只包含 css 文件夹、 script 文件夹和两个 LICENSE 文件。

一.创建demo

在根目录下创建demo.html ,在头部链接引入 css 文件和 js 文件

  <link rel="stylesheet" type="text/css" href="css/imgareaselect-default.css" />

  <script type="text/javascript" src="scripts/jquery.min.js"></script>

  <script type="text/javascript" src="scripts/jquery.imgareaselect.js"></script>

注:插件包中所带的 jquery 版本为 jQuery v1.9.0 

html 结构包括 原图、选区缩略图和信息。原图和选区预览图:

<!-- 原图 -->

<div>

     <img id="photo" src="images/pic3.jpg"/>

</div>



<!-- 选区预览图 -->

<div id="preview" style="width: 100px; height: 100px; overflow: hidden;">

     <img style="position: relative;">

</div>

信息,包括选区起点和终点的横纵坐标、选区的长度和高度:

<table style="margin-top: 1em;">

          <thead>

            <tr>

              <th colspan="2" style="font-size: 110%; font-weight: bold; text-align: left; padding-left: 0.1em;">

                坐标

              </th>

              <th colspan="2" style="font-size: 110%; font-weight: bold; text-align: left; padding-left: 0.1em;">

                尺寸

              </th>

            </tr>

          </thead>

          <tbody>

            <tr>

              <td style="width: 10%;"><b>X<sub>1</sub>:</b></td>

                  <td style="width: 30%;"><input type="text" id="x1" value="-"></td>

                  <td style="width: 20%;"><b>Width:</b></td>

                <td><input type="text" value="-" id="w"></td>

            </tr>

            <tr>

              <td><b>Y<sub>1</sub>:</b></td>

              <td><input type="text" id="y1" value="-"></td>

              <td><b>Height:</b></td>

              <td><input type="text" id="h" value="-"></td>

            </tr>

            <tr>

              <td><b>X<sub>2</sub>:</b></td>

              <td><input type="text" id="x2" value="-"></td>

              <td></td>

              <td></td>

            </tr>

            <tr>

              <td><b>Y<sub>2</sub>:</b></td>

              <td><input type="text" id="y2" value="-"></td>

              <td></td>

              <td></td>

            </tr>

          </tbody>

</table>

 

js 设置:

 1 <script type="text/javascript">

 2 

 3     function preview(img, selection) {

 4         if (!selection.width || !selection.height)

 5             return;

 6 

 7         //预览图尺寸等比例缩放,以100为临界,当在原图中选定的区域大于100px时,预览图中图像缩小;当在原图中选定的区域小于100px时,预览图中图像放大;selection为选区

 8         var scaleX = 100 / selection.width;

 9         var scaleY = 100 / selection.height;

10 

11         $('#preview img').css({

12             width: Math.round(scaleX * 400), //原图宽400

13             height: Math.round(scaleY * 300), //原图高300

14             marginLeft: -Math.round(scaleX * selection.x1),

15             marginTop: -Math.round(scaleY * selection.y1)

16         });

17 

18         $('#x1').val(selection.x1);

19         $('#y1').val(selection.y1);

20         $('#x2').val(selection.x2);

21         $('#y2').val(selection.y2);

22         $('#w').val(selection.width);

23         $('#h').val(selection.height);    

24     }

25 

26     $(function () {

27     

28         //onSelectChange: preview 使用缩略图

29         //模式一.选区宽高比为1:1

30         //$('#photo').imgAreaSelect({ aspectRatio: '1:1', handles: true, fadeSpeed: 200, onSelectChange: preview });

31 

32         //模式二.选区最大宽度200,最大高度150

33         //$('#photo').imgAreaSelect({ maxWidth: 200, maxHeight: 150, handles: true, fadeSpeed: 200, onSelectChange: preview });

34 

35         //模式三.选区的起点和终点初始坐标

36         //$('#photo').imgAreaSelect({ x1: 116, y1: 77, x2: 276, y2: 237, aspectRatio: '1:1', handles: true, fadeSpeed: 200, onSelectChange: preview });

37 

38         //模式四.任意尺寸的选区

39         $('#photo').imgAreaSelect({ handles: true, fadeSpeed: 200, onSelectChange: preview });

40 

41         //缩略图的图片

42         $("#preview img").attr("src",$("#photo").attr("src"));

43     });

44 </script>

二. 预览图的成像原理:

在 html 中,预览窗口的宽度和高度设各置成了 100px ,scaleX 和 scaleY 分别表示预览窗口中图像的缩放比例,以预览窗口的长和高的缩放比等于 100px 除以 原始图像上选区的长和宽,这样当选区的长和宽小于 100px 时,预览图片会被等比放大 

$('#preview img').css({

        width: Math.round(scaleX * 400), //原图宽400

        height: Math.round(scaleY * 300), //原图高300

        marginLeft: -Math.round(scaleX * selection.x1),

        marginTop: -Math.round(scaleY * selection.y1)

});

 

jQuery 图片剪裁插件使用之 imgAreaSelect

当选区的长和宽大于 100px 时,预览图片会被等比缩小:

jQuery 图片剪裁插件使用之 imgAreaSelect 

 

三. 在 js 中,可以设置 4 种选区模式

1. 固定选区长宽比,可以设置成 1:1 , 4:3 等模式,如图:

jQuery 图片剪裁插件使用之 imgAreaSelect

2. 设置选区的最大 ( 最小 ) 宽度和最大 ( 最小 ) 高度

3. 初始时默认显示选区,并给定初始选区的各点 ( 左上和右下 ) 坐标

4. 选取任意尺寸的选区

 

完整demo.html:

  1 <!DOCTYPE html>

  2 <html>

  3 <head>

  4 <meta charset="utf-8">

  5 <title>imgAreaSelect demo1</title>

  6   <link rel="stylesheet" type="text/css" href="css/imgareaselect-default.css" />

  7   <script type="text/javascript" src="scripts/jquery-1.8.3.min.js"></script>

  8   <script type="text/javascript" src="scripts/jquery.imgareaselect.js"></script>

  9 

 10   <script type="text/javascript">

 11 

 12     function preview(img, selection) {

 13         if (!selection.width || !selection.height)

 14             return;

 15 

 16         //预览图尺寸等比例缩放,以100为临界,当在原图中选定的区域大于100px时,预览图中图像缩小;当在原图中选定的区域小于100px时,预览图中图像放大;

 17         var scaleX = 100 / selection.width;

 18         var scaleY = 100 / selection.height;

 19 

 20         $('#preview img').css({

 21             width: Math.round(scaleX * 400), //原图宽400

 22             height: Math.round(scaleY * 300), //原图高300

 23             marginLeft: -Math.round(scaleX * selection.x1),

 24             marginTop: -Math.round(scaleY * selection.y1)

 25         });

 26 

 27         $('#x1').val(selection.x1);

 28         $('#y1').val(selection.y1);

 29         $('#x2').val(selection.x2);

 30         $('#y2').val(selection.y2);

 31         $('#w').val(selection.width);

 32         $('#h').val(selection.height);    

 33     }

 34 

 35     $(function () {

 36     

 37         //onSelectChange: preview 使用缩略图

 38         //选区宽高比为1:1

 39         //$('#photo').imgAreaSelect({ aspectRatio: '1:1', handles: true, fadeSpeed: 200, onSelectChange: preview });

 40 

 41         //选区最大宽度200,最大高度150

 42         //$('#photo').imgAreaSelect({ maxWidth: 200, maxHeight: 150, handles: true, fadeSpeed: 200, onSelectChange: preview });

 43 

 44         //选区的起点和终点初始坐标

 45         //$('#photo').imgAreaSelect({ x1: 116, y1: 77, x2: 276, y2: 237, aspectRatio: '1:1', handles: true, fadeSpeed: 200, onSelectChange: preview });

 46 

 47         //任意尺寸的选区

 48         $('#photo').imgAreaSelect({ handles: true, fadeSpeed: 200, onSelectChange: preview });

 49 

 50         //缩略图的图片

 51         $("#preview img").attr("src",$("#photo").attr("src"));

 52     });

 53 </script>

 54 </head>

 55 

 56 <body>

 57 

 58     <div id="container">

 59     

 60         <!-- 原图 -->

 61         <div>

 62             <img id="photo" src="images/pic3.jpg"/>

 63         </div>

 64 

 65         <!-- 选区缩略图 -->

 66         <div id="preview" style="width: 100px; height:100px; overflow: hidden;">

 67             <img style="position: relative;">

 68         </div>

 69 

 70         <!-- 信息 -->

 71         <table style="margin-top: 1em;">

 72           <thead>

 73             <tr>

 74               <th colspan="2" style="font-size: 110%; font-weight: bold; text-align: left; padding-left: 0.1em;">

 75                 坐标

 76               </th>

 77               <th colspan="2" style="font-size: 110%; font-weight: bold; text-align: left; padding-left: 0.1em;">

 78                 尺寸

 79               </th>

 80             </tr>

 81           </thead>

 82           <tbody>

 83             <tr>

 84               <td style="width: 10%;"><b>X<sub>1</sub>:</b></td>

 85                   <td style="width: 30%;"><input type="text" id="x1" value="-"></td>

 86                   <td style="width: 20%;"><b>Width:</b></td>

 87                 <td><input type="text" value="-" id="w"></td>

 88             </tr>

 89             <tr>

 90               <td><b>Y<sub>1</sub>:</b></td>

 91               <td><input type="text" id="y1" value="-"></td>

 92               <td><b>Height:</b></td>

 93               <td><input type="text" id="h" value="-"></td>

 94             </tr>

 95             <tr>

 96               <td><b>X<sub>2</sub>:</b></td>

 97               <td><input type="text" id="x2" value="-"></td>

 98               <td></td>

 99               <td></td>

100             </tr>

101             <tr>

102               <td><b>Y<sub>2</sub>:</b></td>

103               <td><input type="text" id="y2" value="-"></td>

104               <td></td>

105               <td></td>

106             </tr>

107           </tbody>

108         </table>

109 

110     </div>

111 

112 </body>

113 </html>
View Code

 

四 . 如果需要多个尺寸的预览窗口 ( 比如 100px * 100px , 60px * 60px , 30px * 30px  ),则可以设置多种缩放比例:

var scaleX = 100 / selection.width;

var scaleY = 100 / selection.height;



var scale2X = 60 / selection.width;

var scale2Y = 60 / selection.height;



var scale3X = 30 / selection.width;

var scale3Y = 30 / selection.height;

然后 html 和 css 分别设置每个窗口即可:

jQuery 图片剪裁插件使用之 imgAreaSelect

 

五. 重新选择选区

html 增加:

<!-- 重置选区 -->

<input type="button" id="reselect" value="重新选择" />

js $(function(){}) 中增加:

//重新选择

$("#reselect").click(function(){



        $('#photo').data('imgAreaSelect').remove();

        $('#photo').removeData('imgAreaSelect');

        $('#photo').imgAreaSelect({ aspectRatio: '1:1', handles: true, fadeSpeed: 200, onSelectChange: preview });

});

如图:

jQuery 图片剪裁插件使用之 imgAreaSelect

 

六 . 此插件的选区预览图只能在确定长宽比的情况下正常预览,在截取任意尺寸的选区时将得不到正确比例的预览图,如果要实现任意长宽比的选区都能正常显示,可以修改代码:

预览图部分 html:

<!-- 选区预览图 -->

<div id="preview" style="display:none; overflow: hidden;">

    <img style="position: relative;">

</div>

初始的预览图外围 div 设置了 display:none

js 的 preview() 函数修改如下:

 1 function preview(img, selection) {

 2         if (!selection.width || !selection.height)

 3             return;

 4 

 5         $('#preview img').css({

 6 

 7              marginLeft: -Math.round(selection.x1),

 8              marginTop: -Math.round(selection.y1)

 9         });

10 

11         $("#preview").css({"width":selection.width,"height":selection.height}).show();

12 

13         $('#x1').val(selection.x1);

14         $('#y1').val(selection.y1);

15         $('#x2').val(selection.x2);

16         $('#y2').val(selection.y2);

17         $('#w').val(selection.width);

18         $('#h').val(selection.height);    

19 }

把预览图尺寸等比缩放的语句删除,预览图的上边距和左边距分别是选区左上角的横纵坐标,然后设置预览图外围 div 的宽度和高度直接设置为选区的宽度和高度并且显示,此时并不固定比例的选区的预览图也能正常预览,如图:

jQuery 图片剪裁插件使用之 imgAreaSelect

此时的完整 demo.html:

  1 <!DOCTYPE html>

  2 <html>

  3 <head>

  4 <meta charset="utf-8">

  5 <title>imgAreaSelect demo1</title>

  6   <link rel="stylesheet" type="text/css" href="css/imgareaselect-default.css" />

  7   <script type="text/javascript" src="scripts/jquery-1.8.3.min.js"></script>

  8   <script type="text/javascript" src="scripts/jquery.imgareaselect.js"></script>

  9 

 10   <script type="text/javascript">

 11 

 12     function preview(img, selection) {

 13         if (!selection.width || !selection.height)

 14             return;

 15 

 16         $('#preview img').css({

 17 

 18              marginLeft: -Math.round(selection.x1),

 19              marginTop: -Math.round(selection.y1)

 20         });

 21 

 22         $("#preview").css({"width":selection.width,"height":selection.height}).show();

 23 

 24         $('#x1').val(selection.x1);

 25         $('#y1').val(selection.y1);

 26         $('#x2').val(selection.x2);

 27         $('#y2').val(selection.y2);

 28         $('#w').val(selection.width);

 29         $('#h').val(selection.height);    

 30     }

 31 

 32     $(function () {

 33     

 34         //onSelectChange: preview 使用缩略图

 35         //选区宽高比为1:1

 36         //$('#photo').imgAreaSelect({ aspectRatio: '1:1', handles: true, fadeSpeed: 200, onSelectChange: preview });

 37 

 38         //选区最大宽度200,最大高度150

 39         //$('#photo').imgAreaSelect({ maxWidth: 200, maxHeight: 150, handles: true, fadeSpeed: 200, onSelectChange: preview });

 40 

 41         //选区的起点和终点初始坐标

 42         //$('#photo').imgAreaSelect({ x1: 116, y1: 77, x2: 276, y2: 237, aspectRatio: '1:1', handles: true, fadeSpeed: 200, onSelectChange: preview });

 43 

 44         //任意尺寸的选区

 45         $('#photo').imgAreaSelect({ handles: true, fadeSpeed: 200, onSelectChange: preview });

 46 

 47         //缩略图的图片

 48         $("#preview img").attr("src",$("#photo").attr("src"));

 49 

 50     });

 51 </script>

 52 </head>

 53 

 54 <body>

 55 

 56     <div id="container">

 57     

 58         <!-- 原图 -->

 59         <div>

 60             <img id="photo" src="images/pic3.jpg"/>

 61         </div>

 62 

 63         <!-- 选区预览图 -->

 64         <div id="preview" style="display:none; overflow: hidden;">

 65             <img style="position: relative;">

 66         </div>

 67 

 68         <!-- 信息 -->

 69         <table style="margin-top: 1em;">

 70           <thead>

 71             <tr>

 72               <th colspan="2" style="font-size: 110%; font-weight: bold; text-align: left; padding-left: 0.1em;">

 73                 坐标

 74               </th>

 75               <th colspan="2" style="font-size: 110%; font-weight: bold; text-align: left; padding-left: 0.1em;">

 76                 尺寸

 77               </th>

 78             </tr>

 79           </thead>

 80           <tbody>

 81             <tr>

 82               <td style="width: 10%;"><b>X<sub>1</sub>:</b></td>

 83                   <td style="width: 30%;"><input type="text" id="x1" value="-"></td>

 84                   <td style="width: 20%;"><b>Width:</b></td>

 85                 <td><input type="text" value="-" id="w"></td>

 86             </tr>

 87             <tr>

 88               <td><b>Y<sub>1</sub>:</b></td>

 89               <td><input type="text" id="y1" value="-"></td>

 90               <td><b>Height:</b></td>

 91               <td><input type="text" id="h" value="-"></td>

 92             </tr>

 93             <tr>

 94               <td><b>X<sub>2</sub>:</b></td>

 95               <td><input type="text" id="x2" value="-"></td>

 96               <td></td>

 97               <td></td>

 98             </tr>

 99             <tr>

100               <td><b>Y<sub>2</sub>:</b></td>

101               <td><input type="text" id="y2" value="-"></td>

102               <td></td>

103               <td></td>

104             </tr>

105           </tbody>

106         </table>

107 

108     </div>

109 

110 </body>

111 </html>
View Code

 

此插件只是用 jQuery 获取到了选区的各点坐标,要真正实现剪裁功能要把坐标值传给 PHP 文件进行图片剪裁处理。

附:demo 下载地址

 

其他关于此插件的教程可以点击:http://www.cnblogs.com/mizzle/archive/2011/10/13/2209891.html

基于此插件的模块还可见:主页:PHP & jQuery image upload and cropdemo 自带上传、剪裁和保存功能。

你可能感兴趣的:(jquery)