//jcrop 用法  lpf
//页面引入
//<link rel="stylesheet" href="${basePath}/scripts/jcrop/jquery.Jcrop.css" type="text/css" />
//<script src="${basePath}/scripts/jcrop/jquery.Jcrop.js"></script>
//图片位置<img src="" id="target" style="width: 100%;height:100%;"/>
//赋值框<form action="${basePath}/success.jsp" method="post" >
//x轴:<input type="text" size="4" id="x1" name="x" />
//y轴:<input type="text" size="4" id="y1" name="y"/>
//宽度:<input type="text" size="4" id="w" name="w"/>
//高度:<input type="text" size="4" id="h" name="h"/>
//显示图片宽:<input type="text" size="4" id="tw" name="tw"/>
//<input type="button" value="裁剪" onclick="uploadImage();"/>
//</form>
jQuery(function($){
//浏览器宽高
var width=$(window).width();
var height=$(window).height();
//图片工具对象
var jcrop_api,
boundx="",
boundy="",
$preview = $('#preview-pane'),
$pcnt = $('#preview-pane .preview-container'),
$pimg = $('#preview-pane .preview-container img'),
xsize = $pcnt.width(),
ysize = $pcnt.height();
$('#target').Jcrop({
onChange:showCoords,//获取选中的值
onSelect:showCoords,//获取拖拽的值
keySupport:true,
aspectRatio:,
boxWidth:width,
boxHeight:height
},function(){
var bounds = this.getBounds();
boundx = bounds[];
boundy = bounds[];
jcrop_api = this;
$preview.appendTo(jcrop_api.ui.holder);
});
//赋值
function showCoords(c){
var x=c.x;
var y=c.y;
var w=c.w;
var h=c.h;
$("#x1").val(parseInt(x));
$("#y1").val(parseInt(y));
$("#w").val(parseInt(w));
$("#h").val(parseInt(h));
if (parseInt(c.w) > ){
var rx = xsize / c.w;
var ry = ysize / c.h;
$pimg.css({
width: Math.round(rx * boundx) + 'px',
height: Math.round(ry * boundy) + 'px',
marginLeft: '-' + Math.round(rx * c.x) + 'px',
marginTop: '-' + Math.round(ry * c.y) + 'px'
});
}
}
//更换图片设置
function upimg(img){
jcrop_api.setImage(img,function(){
this.setOptions({
bgOpacity:0.6,
minSize: [, ],
maxSize: [, ]
});
var bounds = this.getBounds();
boundx = bounds[];
$('#tw').val(boundx);
this.setSelect(getRandom());
});
}
//随机选择框
function getRandom() {
var dim = jcrop_api.getBounds();
return [
Math.round(Math.random() * dim[]),
Math.round(Math.random() * dim[]),
Math.round(Math.random() * dim[]),
Math.round(Math.random() * dim[])
];
};
});
 File fromPic = new File(fileSavePath);
BufferedImage image = ImageIO.read(fromPic);
int imageWidth = image.getWidth();
// 按比例缩放后 输出到 BufferedImage
BufferedImage thumbnail = Thumbnails.of(fileSavePath)
.scale(Double.valueOf(request.getParameter("tw"))
/ imageWidth)
.asBufferedImage();
// 截取图片路径,
fileSavePath = request.getSession().getServletContext()
.getRealPath("/upload")
+ "/" + upLoadPath + newfilename + "_thum.jpg";
//生成截取图片,按照坐标
Thumbnails
.of(thumbnail)
.sourceRegion(
Integer.valueOf(request.getParameter("x")),
Integer.valueOf(request.getParameter("y")),
Integer.valueOf(request.getParameter("w")),
Integer.valueOf(request.getParameter("h")))
.size(Integer.valueOf(request.getParameter("w")),
Integer.valueOf(request.getParameter("h")))
.keepAspectRatio(false)
.toFile(fileSavePath);

在页面进行截取的时候,如果所操作的图片与原图大小不一致,在后台进行截取的时候就会出现偏差,

此处拿到原图后会与页面显示的图片大小进行比较,计算比例,进行比例缩放,在进行截取

jcrop+java 后台的更多相关文章

  1. 如何用CropBox实现头像裁剪并与java后台交互

    如何用CropBox实现头像裁剪并与java后台交互 参考网站:https://developer.mozilla.org/zh-CN/docs/Web/API/Blob 参考: http://blo ...

  2. pagebean pagetag java 后台代码实现分页 demo 前台标签分页 后台java分页

    java 后台代码实现分页 demo 实力 自己写的 标签分页 package com.cszoc.sockstore.util; import java.util.HashMap;import ja ...

  3. ajax提交数据到java后台,并且返回json格式数据前台接收处理值

    1.前台html页面.有一段代码如下: 账  户:  <input type="text" name="userName" id="userN& ...

  4. java后台对前端输入的特殊字符进行转义

    转自:http://www.cnblogs.com/yangzhilong/p/5667165.html java后台对前端输入的特殊字符进行转义 HTML: 常见的帮助类有2个:一个是spring的 ...

  5. java后台获取Access_token的工具方法

    本方法主要通过java后台控制来获取Access_token,需要你已经知道自己的ID跟密码 因为微信的权限设置大概每天可以获取两千条,每条有效时间为2小时 /** * 输入自己的id跟密码,获取微信 ...

  6. js前台加密,java后台解密实现

    参考资料: JS前台加密,java后台解密实现

  7. java后台异步任务执行器TaskManager

    java后台异步任务执行器TaskManager 此方式基于MVC方式: 一,使用任务: @Resource private TaskManager taskManager; public strin ...

  8. fastJson java后台转换json格式数据

    什么事JSON? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于JavaScript Progra ...

  9. encodeURIComponent编码后java后台的解码 (AJAX中文解决方案)

    encodeURIComponent编码后java后台的解码 (AJAX中文解决方案) 同学的毕业设计出现JavaScript用encodeURIComponentt编码后无法再后台解码的问题. 原来 ...

随机推荐

  1. SQL的各种连接--自联结,内连接,外连接,交叉连接

    1.准备两个表:Student,Course,其中student.C_S_Id=Course.C_Id(即Student 表中的 C_S_Id 字段为外键列,关联的是 Course 表的 C_Id 主 ...

  2. GSL--GNU Scientific Library 小记

    摘自http://qianjigui.iteye.com/blog/847612 GSL(GNU Scientific Library)是一个 C 写成的用于科学计算的库,下面是一些相关的包 Desi ...

  3. CentOS7.2安装Oracle12.1.0.2

    Centos7.2环境安装(安装桌面) #安装界面 #查看版本 cat /etc/redhat-release #查看连接 ifconfig eth0 echo "127.0.0.1 tes ...

  4. java基础复习(三)

    一.运算符 1.算术运算符 1) 加法(+) 加法   正号  字符串拼接 2) 减法(-) 减法 负号 3) 乘法 (*) 乘法 4) 除法(/) 除法 整数(小数)相除的例子 10/3 =3:   ...

  5. Quartz.Net 任务调度之时间策略(4)

    在复杂的业务逻辑中,cron可以灵活的制定时间策略 先说使用方法 ITrigger trigger = TriggerBuilder.Create() .WithIdentity("trig ...

  6. Codeforces 776E: The Holmes Children (数论 欧拉函数)

    题目链接 先看题目中给的函数f(n)和g(n) 对于f(n),若自然数对(x,y)满足 x+y=n,且gcd(x,y)=1,则这样的数对对数为f(n) 证明f(n)=phi(n) 设有命题 对任意自然 ...

  7. Redis缓存在django中的配置

    django  settings中的配置 # 缓存 CACHES = { "default": { "BACKEND": "django_redis. ...

  8. 3天教你掌握Python必备常用英语词汇

    第一天 path [ pɑ:θ ] 路径 unexpected [ˌʌnɪkˈspektɪd] 不期望的 class [klɑ:s] 类 usage [ˈju:sɪdʒ] 使用 public ['p ...

  9. 如何为元组中的每个元素命名,提高程序可读性---Python数据结构与算法相关问题与解决技巧

    实际案例: 学生信息系统中,数据为固定格式:(名字,年龄,性别,邮箱) ,通常使用元组来存储 使用优点: 使用元组最大的优点在于节省空间,存储相同的数据,使用元组比使用字典,空间小很多 使用缺点: 访 ...

  10. python深浅拷贝的理解和区分

    import copy a1 = ['s1','s2','s3'] #可变数据类型 a = [1,2,a1] b = a a1.append('s4') #浅拷贝 c = copy.copy(a) # ...