My jcrop code
$(function(){
// Create variables (in this scope) to hold the API and image size
var jcrop_api,
boundx,
boundy,
// Grab some information about the preview pane
$preview = $('#preview-pane'),
$pcnt = $('#preview-pane .preview-container'),
$pimg = $('#preview-pane .preview-container img'),
xsize = $pcnt.width(),
ysize = $pcnt.height();
//console.log('init',[xsize,ysize]);
$('#target').Jcrop({
onChange: updateInfo,
onSelect: updateInfo,
onRelease: clearInfo,
setSelect: [0, 0, 150, 180],
boxWidth: 400, boxHeight: 300,
allowMove: true,
allowResize: true,
allowSelect: true,
aspectRatio: xsize / ysize
},function(){
// Use the API to get the real image size
var bounds = this.getBounds();
boundx = bounds[0];
boundy = bounds[1];
// Store the API in the jcrop_api variable
jcrop_api = this;
// Move the preview into the jcrop container for css positioning
$preview.appendTo(jcrop_api.ui.holder);
});
// update info by cropping (onChange and onSelect events handler)
function updateInfo(e) {
if (parseInt(e.w) > 0) {
var rx = xsize / e.w;
var ry = ysize / e.h;
$pimg.css({
width : Math.round(rx * boundx) + 'px',
height : Math.round(ry * boundy) + 'px',
marginLeft : '-' + Math.round(rx * e.x) + 'px',
marginTop : '-' + Math.round(ry * e.y) + 'px'
});
}
$('#x1').val(e.x);
$('#y1').val(e.y);
$('#w').val(e.w);
$('#h').val(e.h);
};
// clear info by cropping (onRelease event handler)
function clearInfo() {
$('#w').val('');
$('#h').val('');
};
});
Java controller which handles it
@RequestMapping(value = "/editProfileImage", method = RequestMethod.POST)
public @ResponseBody
FileMeta edit(MultipartHttpServletRequest request,
@RequestParam(value = "x1") final int x1,
@RequestParam(value = "y1") final int y1,
@RequestParam(value = "w") final int w,
@RequestParam(value = "h") final int h) throws Exception {
Iterator<String> itr = fileIterator(request);
MultipartFile mpf = null;
final FileMeta fileMeta = new FileMeta();
// 2. get each file
while (itr.hasNext()) {
mpf = getMultipartFile(request, itr);
checkIfEmpty(mpf);
checkifValidFormat(mpf);
final BufferedImage subImage = getBufImage(mpf).getSubimage(x1, y1, w, h);
//final BufferedImage resizedImage = resizeImage(subImage);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(subImage,
mpf.getContentType().replace("image/", ""), baos);
final Account account = accountManager.findBySigin((String) request
.getAttribute("account"));
profilePictureService.saveProfilePicture(account.getId(),
baos.toByteArray());
prepareMetaInformation(mpf, fileMeta, account, baos);
}
return fileMeta;
}
This code works fine for some images but dont work fine for most of the images. Does anybody has any clue.
For example for the following image It works perfect because i am getting the cropped image perfectly.
But for this image for example I am not getting the cropped image correctly.