在后台来进行图片切割。

头像截取的原理:在前台使用jcrop获取切面的x轴坐标、y轴坐标、切面高度、切面宽度,然后将这四个值传给后

台。在后台要进行放大处理:将切面放大N倍,N=原图/前台展示的头像。即X = X*原图宽/前图宽,Y = Y*原图高/前

图高,W = W*原图宽/前图宽,H = H*原图高/前图高。

实例:

JSP:

样式:大图、小图展示都需要固定高度、宽度,因为后台需要进行放大处理。即:

然后是使用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();

}

}

}

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php jq截图插件,jQuery jcrop插件截图使用方法_jquery相关推荐

  1. SlidesJS基本使用方法和官方文档解释 【Jquery幻灯片插件 Jquery相册插件】

    SlidesJS基本使用方法和官方文档解释 [Jquery幻灯片插件 Jquery相册插件] 标签: jquery文档functionstringdiv相册 2012-04-19 15:23 3931 ...

  2. 使用jquery jcrop插件进行图片的截取与保存

    第一步:上传大图片到服务器,并且展示到页面 第二部:调用jcrop组件js及css <script src="${ctx}/js/jquery-jcrop/jquery.Jcrop.j ...

  3. jquery php 分页插件,jQuery 分页插件代码

    jQuery 分页插件代码 js代码 var newlist = new Vue({ el: '#app', data: { current_page: 1, //当前页 pages: 50, //总 ...

  4. php幻灯片的插件,jQuery幻灯片插件Flickerplate

    简介 Flickerplate 是一个基于 jQuery 的幻灯片插件,压缩后仅 6KB.它支持左右箭头控制.圆点导航.自动播放.主题设置.HTML data 属性等等. 兼容 浏览器兼容:Flick ...

  5. php旅游网站景区天气插件,jquery天气插件

    插件描述:一个简单的jQuery插件可以显示当前的天气信息,使用雅虎天气的任何位置. 一个简单的jQuery插件可以显示当前的天气信息,使用雅虎天气的任何位置.开发者James Fleeting.下载 ...

  6. html ppt 插件,jquery幻灯片插件slidr.js

    插件描述:一个简单的,轻量级的JavaScript库 添加幻灯片切换到您的网页,无依赖. 特点 添加尽可能多的Slidr的,只要你想. 动态调整大小 - 适应其内容的大小,除非你不想要它. 键盘导航 ...

  7. html5 新手引导插件,jQuery引导插件intro.js

    插件描述:intro.js分步导航 ======================以下内容由 苍白 提供===================== 设置参数: 设置多个格式 json格式: key:va ...

  8. jQuery插件 -- jQuery UI插件

    jQuery UI 主要分为3个部分: 交互.微件和效果库 交互:这里都是一些与鼠标交互相关的内容.包括拖动(Draggable).置放(Doppable).缩放(Resizable).选择(Sele ...

  9. html怎么引入圆角插件,jQuery圆角插件demo页面 张鑫旭-鑫空间-鑫生活

    Auto-Ready! 一.可用的模式 默认的圆角样式表现round Round $(this).corner(); Bevel $(this).corner("bevel"); ...

最新文章

  1. 设置日期和时间的设计与实现
  2. IxRmhOECiP
  3. Servlet+MySQL使用DBCP数据库连接池实现用户登录
  4. 2019年税收分类编码_通过分析112,654个编码测试,我们了解了2019年开发人员的招聘趋势...
  5. 了解 | 你必须了解的Mysql 三大日志
  6. 电脑要什么配置好_收藏好!设计专业学生电脑配置推荐
  7. java jdbc 批量更新_java,jdbc,大量数据update更新效率很慢,哪位大神可怜可怜我吧...
  8. 比较:Java和python
  9. System.Diagnostics.Process的常见用法
  10. MyEclipse + Tomcat 热部署问题
  11. 运维人员写项目方案及推进项目的基本流程思路
  12. php 是否支持json,php json 支持汉语
  13. viper4android 6.0脉冲,【详解】v4a音效脉冲样本
  14. jsonDB使用手册
  15. 免费公共DNS服务器大全
  16. 3.Adaptive AUTOSAR 架构详解
  17. facebook获取好友头像
  18. HTML5设计更具有交互性的标签方法(含智能辅助设备使用的HTML5,翻译资料)
  19. 实现App跳转到应用商店
  20. Manjaro更换系统默认字体,主题

热门文章

  1. realvnc免费版,细数4款超好用的realvnc免费版
  2. 查看java变量的地址_Java 变量地址
  3. 网站页脚设计的几个小技巧
  4. win7驱动程序未经签名可以使用吗_Win7禁用驱动程序签名强制的方法
  5. 7-7 自助餐厅2 (18分)C语言
  6. C/C++ 绝对值【简单易懂,代码可以直接运行】
  7. 重庆华龙网联合链环科技恭祝2020文旅会盛大开幕!
  8. win10系统如何实现开机启动程序?用shell:startup命令
  9. Linux字符串处理函数strdup、strndup、strndupa、strdupa
  10. PHP二维码的生成与识别案例