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 相关文章推荐
一端时间轮换的广告
Jun 26 Javascript
js弹出模式对话框,并接收回传值的方法
Mar 12 Javascript
开发中可能会用到的jQuery小技巧
Mar 07 Javascript
通用javascript代码判断版本号是否在版本范围之间
Nov 29 Javascript
Bootstrap轮播加上css3动画,炫酷到底!
Dec 22 Javascript
js事件处理程序跨浏览器解决方案
Mar 27 Javascript
jQuery的ajax下载blob文件
Jul 21 Javascript
jQuery拖拽通过八个点改变div大小
Nov 29 Javascript
Vue.js系列之项目结构说明(2)
Jan 03 Javascript
javascript+html5+css3自定义弹出窗口效果
Oct 26 Javascript
vue使用axios上传文件(FormData)的方法
Apr 14 Javascript
javascript实现智能手环时间显示
Sep 18 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
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
利用PHP制作简单的内容采集器的代码
2007/11/28 PHP
php 动态多文件上传
2009/01/18 PHP
PHP获取文本框、密码域、按钮的值实例代码
2017/04/19 PHP
PHP上传文件及图片到七牛的方法
2018/07/25 PHP
利用js获取服务器时间的两个简单方法
2010/01/08 Javascript
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
chrome原生方法之数组
2011/11/30 Javascript
extjs tabpanel限制选项卡数量实现思路及代码
2013/04/02 Javascript
js open() 与showModalDialog()方法使用介绍
2013/09/10 Javascript
Angular 根据 service 的状态更新 directive
2016/04/03 Javascript
jquery自定义插件开发之window的实现过程
2016/05/06 Javascript
jQuery实现页面评论栏中访客信息自动填写功能的方法
2016/05/23 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
node.js中module.exports与exports用法上的区别
2016/09/02 Javascript
JavaScript字符串对象
2017/01/14 Javascript
NodeJs下的测试框架Mocha的简单介绍
2017/02/22 NodeJs
使用Bootstrap打造特色进度条效果
2017/05/02 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
vue如何解决循环引用组件报错的问题
2018/09/22 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
Node.js API详解之 string_decoder用法实例分析
2020/04/29 Javascript
解决vue页面渲染但dom没渲染的操作
2020/07/27 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
python使用xmlrpc实例讲解
2013/12/17 Python
python比较两个列表大小的方法
2015/07/11 Python
python日期时间转为字符串或者格式化输出的实例
2018/05/29 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
2020/01/10 Python
关于Django Models CharField 参数说明
2020/03/31 Python
英国在线药房:Express Chemist
2019/03/28 全球购物
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书
教师自查自纠材料
2014/10/14 职场文书
初中家长评语和期望
2014/12/26 职场文书
Python Pandas数据分析之iloc和loc的用法详解
2021/11/11 Python