我的 jcrop 代码
$(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;
}
此代码适用于某些图像,但不适用于大多数图像。有没有人有任何线索。
例如对于下面的图像 它工作得很好,因为我得到了完美的裁剪图像。
但是对于这个图像,例如 我没有正确地得到裁剪的图像。