jQuery jcrop插件截图使用方法


Posted in Javascript onNovember 20, 2013

在后台来进行图片切割。
头像截取的原理:在前台使用jcrop获取切面的x轴坐标、y轴坐标、切面高度、切面宽度,然后将这四个值传给后
台。在后台要进行放大处理:将切面放大N倍,N=原图/前台展示的头像。即X = X*原图宽/前图宽,Y = Y*原图高/前
图高,W = W*原图宽/前图宽,H = H*原图高/前图高。
实例:
JSP:

<div id="cutImage" style="display: none;">
 <div class="bigImg" style="float: left;">
     <img id="srcImg" src="" width="400px" height="270px"/>
 </div>
 <div id="preview_box" class="previewImg">
     <img id="previewImg" src="" width="120px"/>
 </div> <div >
 <form action="" method="post" id="crop_form">
      <input type="hidden" id="bigImage" name="bigImage"/>
    <input type="hidden" id="x" name="x" />
    <input type="hidden" id="y" name="y" />
    <input type="hidden" id="w" name="w" />
    <input type="hidden" id="h" name="h" />
    <P><input type="button" value="确认" id="crop_submit"/></P>
     </form>
</div>
    </div>

样式:大图、小图展示都需要固定高度、宽度,因为后台需要进行放大处理。即:<img width=""height=""/>
然后是使用jcrop了。在使用jcrop前我们需要下载jcrop:http://deepliquid.com/content/Jcrop.html。
将下载的压缩包解压后可以看到三个文件夹及一个index.html文件,/ css下放置的是Jcorp的样式文件,/demo下放置的是几个简单的例子(index.html中引用的链接就是放置在这个文件夹下),/js下放置的是Jcorp中最重要的脚本文件。我们只需要使用三个文件即可:jquery.Jcrop.css、jquery.Jcrop.js、JQuery.js
使用方法:

//裁剪图像
function cutImage(){
    $("#srcImg").Jcrop( {
     aspectRatio : 1,
     onChange : showCoords,
     onSelect : showCoords,
     minSize :[200,200]
 });
 //简单的事件处理程序,响应自onChange,onSelect事件,按照上面的Jcrop调用
 function showCoords(obj) {
     $("#x").val(obj.x);
     $("#y").val(obj.y);
     $("#w").val(obj.w);
     $("#h").val(obj.h);
     if (parseInt(obj.w) > 0) {
  //计算预览区域图片缩放的比例,通过计算显示区域的宽度(与高度)与剪裁的宽度(与高度)之比得到
  var rx = $("#preview_box").width() / obj.w;
  var ry = $("#preview_box").height() / obj.h;
  //通过比例值控制图片的样式与显示
  $("#previewImg").css( {
      width : Math.round(rx * $("#srcImg").width()) + "px", //预览图片宽度为计算比例值与原图片宽度的乘积
      height : Math.round(rx * $("#srcImg").height()) + "px", //预览图片高度为计算比例值与原图片高度的乘积
      marginLeft : "-" + Math.round(rx * obj.x) + "px",
      marginTop : "-" + Math.round(ry * obj.y) + "px"
  });
     }
 }
}

在使用jcrop前一定要先将$(“”).jcrop();进行预初始化,否则没有效果。
 还有一种调用的方法,

   

    var api = $.Jcrop('#cropbox',{
    onChange: showPreview,
    onSelect: showPreview,
    aspectRatio: 1
    });
   

这种方法是将Jcrop生成的对象赋给一个全局变量,这样操作就会比较方便。
通过上面的js,就将X轴坐标、Y轴坐标、高度H、宽度W这个四个值传递给后台了,后台就只需要根据这四个值
进行放大处理,然后切割即可。

 Action

/**
     * 裁剪头像
     */
    public String cutImage(){
 /*
  * 获取参数
  * x,y,w,h,bigImage
  */
 HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
 int x = Integer.valueOf(request.getParameter("x"));
 int y = Integer.valueOf(request.getParameter("y"));
 int w = Integer.valueOf(request.getParameter("w"));
 int h = Integer.valueOf(request.getParameter("h"));
 String bigImage = request.getParameter("bigImage");    //获取文件真实路径
 //获取文件名
 String[] imageNameS = bigImage.split("/");
 String imageName = imageNameS[imageNameS.length-1];
 //文件正式路径
 String imagePath = getSavePath()+"\\"+imageName;
 //切割图片
 ImageCut imageCut = new ImageCut();
 imageCut.cutImage(imagePath, x, y, w, h);
 //头像裁剪完成后,将图片路径保存到用户
 UserBean userBean = (UserBean) request.getSession().getAttribute("userBean");
 userBean.setUserPhoto(bigImage);
 //保存头像
 UserCenterService centerService = new UserCenterService();
 centerService.updatePhoto(userBean);
 //将修改后的用户保存到session中
 request.getSession().setAttribute("userBean", userBean);
 return "updatePhoto";
    }
}

裁剪图片工具类:ImageCut.java

public class ImageCut {    /**
     * 图片切割
     * @param imagePath  原图地址
     * @param x  目标切片坐标 X轴起点
     * @param y     目标切片坐标 Y轴起点
     * @param w  目标切片 宽度
     * @param h  目标切片 高度
     */
    public void cutImage(String imagePath, int x ,int y ,int w,int h){
 try {
     Image img;
     ImageFilter cropFilter;
     // 读取源图像
     BufferedImage bi = ImageIO.read(new File(imagePath));
     int srcWidth = bi.getWidth();      // 源图宽度
     int srcHeight = bi.getHeight();    // 源图高度
     //若原图大小大于切片大小,则进行切割
     if (srcWidth >= w && srcHeight >= h) {
  Image image = bi.getScaledInstance(srcWidth, srcHeight,Image.SCALE_DEFAULT);
  int x1 = x*srcWidth/400;
  int y1 = y*srcHeight/270;
  int w1 = w*srcWidth/400;
  int h1 = h*srcHeight/270;
  cropFilter = new CropImageFilter(x1, y1, w1, h1);
  img = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(image.getSource(), cropFilter));
  BufferedImage tag = new BufferedImage(w1, h1,BufferedImage.TYPE_INT_RGB);
  Graphics g = tag.getGraphics();
  g.drawImage(img, 0, 0, null); // 绘制缩小后的图
  g.dispose();
  // 输出为文件
  ImageIO.write(tag, "JPEG", new File(imagePath));
     }
 } catch (IOException e) {
     e.printStackTrace();
 }
    }
}

jQuery jcrop插件截图使用方法

Javascript 相关文章推荐
Discuz! 6.1_jQuery兼容问题
Sep 23 Javascript
jQuery阻止冒泡和HTML默认操作
Nov 17 Javascript
jquery的相对父元素和相对文档定位示例代码
Aug 02 Javascript
js计算两个时间之间天数差的实例代码
Nov 19 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
Oct 11 Javascript
jQuery实现响应浏览器缩放大小并改变背景颜色
Oct 31 Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
Jun 21 Javascript
jQuery快速高效制作网页交互特效
Feb 24 Javascript
Vuex简单入门
Apr 19 Javascript
jquery自定义显示消息数量
Dec 19 jQuery
微信小程序实现日历功能
Nov 27 Javascript
基于 Vue 的 Electron 项目搭建过程图文详解
Jul 22 Javascript
javascript中的if语句使用介绍
Nov 20 #Javascript
js控制表单不能输入空格的小例子
Nov 20 #Javascript
js中Image对象以及对其预加载处理示例
Nov 20 #Javascript
JS按字节截取字符长度实例
Nov 20 #Javascript
详解JS 比较两个Json对象的值是否相等的实例
Nov 20 #Javascript
javascipt匹配单行和多行注释的正则表达式
Nov 20 #Javascript
自定义的一个简单时尚js下拉选择框
Nov 20 #Javascript
You might like
PHP 上传文件大小限制
2009/07/05 PHP
php 论坛采集程序 模拟登陆,抓取页面 实现代码
2009/07/09 PHP
Smarty变量调节器失效的解决办法
2014/08/20 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
Javascript写了一个清除“logo1_.exe”的杀毒工具(可扫描目录)
2007/02/09 Javascript
用JTrackBar实现的模拟苹果风格的滚动条
2007/08/06 Javascript
基于JQuery框架的AJAX实例代码
2009/11/03 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
2014/03/18 Javascript
JavaScript数字和字符串转换示例
2014/03/26 Javascript
使用jQuery设置disabled属性与移除disabled属性
2014/08/21 Javascript
jQuery on()方法使用技巧详解
2015/04/16 Javascript
jQuery子窗体取得父窗体元素的方法
2015/05/11 Javascript
JavaScript实现广告的关闭与显示效果实例
2015/07/02 Javascript
jQuery中map函数的两种方式
2017/04/07 jQuery
Vue开发中整合axios的文件整理
2017/04/29 Javascript
详解webpack+angular2开发环境搭建
2017/06/28 Javascript
ReactNative之FlatList的具体使用方法
2017/11/29 Javascript
Python中join函数简单代码示例
2018/01/09 Python
python微信跳一跳系列之自动计算跳一跳距离
2018/02/26 Python
python字符串常用方法
2018/06/14 Python
利用python提取wav文件的mfcc方法
2019/01/09 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
将python字符串转化成长表达式的函数eval实例
2020/05/11 Python
jupyter notebook指定启动目录的方法
2021/03/02 Python
HTML5实现视频直播功能思路详解
2017/11/16 HTML / CSS
Otticanet意大利:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
Mamaearth官方网站:印度母婴护理产品公司
2019/10/06 全球购物
js正则匹配markdown里的图片标签的实现
2021/03/24 Javascript
药剂专业学生求职信范文
2013/12/28 职场文书
汽车维修专业个人求职信范文
2014/01/01 职场文书
上课说话检讨书大全
2014/01/22 职场文书
年会邀请函范文
2015/01/30 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
小区环境卫生倡议书
2015/04/29 职场文书
css position fixed 左右双定位的实现代码
2021/04/29 HTML / CSS
深入解析MySQL索引数据结构
2021/10/16 MySQL