Galera descobri como funciona o Jcrop.
E o seguinte … aquela imagem preview qua aparece nao é nada mais nada menos que a mesma imagem, porem sao feitos calculos de escala para deixar a imagem do tamanho que se preferir. Entao a saida para salvar o preview é.
Recuperar as escalas feitas pelo Jcrop no momento de execução
function showPreview(coords){
if (parseInt(coords.w) > 0){
var rx = 200 / coords.w;
var ry = 200 / coords.h;
var w = $("#cropbox").attr('width');
var h = $("#cropbox").attr('height');
jQuery('#preview').css({
width: Math.round(rx * w) + 'px',
height: Math.round(ry * h) + 'px',
marginLeft: '-' + Math.round(rx * coords.x) + 'px',
marginTop: '-' + Math.round(ry * coords.y) + 'px'
});
$('#x').val(coords.x);
$('#x2').val(coords.x2);
$('#y2').val(coords.y2);
$('#y').val(coords.y);
$('#w').val(coords.w);
$('#h').val(coords.h);
}
}
Mandar essas coordenadas pro action
function salvaPreview(){
$.ajax({type:'POST',
url: 'preview.do',
data:{ img: $("#nomeFoto").val(), x: $('#x').val(), y: $('#y').val(), w: $('#w').val(), h: $('#h').val()},
success: function (text){
alert("Yataaa!!");
}
});
}
Nesta camada tratar a imagem que foi feita upload que provavelmente deve estar em um arquivo temporario e recortar a imagem usando as coordenadas passadas pelo Jcrop.
Nesta parte tentei fazer de duas maneiras porem as duas sem sucesso.
public class PreviewAction extends Action {
public ActionForward execute(ActionMapping map, ActionForm form,
HttpServletRequest req, HttpServletResponse res) throws Exception {
PreviewForm arquivoForm = (PreviewForm) form;
String img = arquivoForm.getImg();
int x = Integer.parseInt(arquivoForm.getX());
int y = Integer.parseInt(arquivoForm.getY());
int w = Integer.parseInt(arquivoForm.getW());
int h = Integer.parseInt(arquivoForm.getH());
// local do tmp
String temp = getServlet().getServletContext().getRealPath("/")
+ "fotosTMP";
// local definitivo
String definitivo = getServlet().getServletContext().getRealPath("/")
+ "fotosUsers";
String[] extensao = { ".tiff", ".jpg", ".pjpeg", ".jpeg", ".gif",
".png", ".x-png" };
File arq = new File(temp + "/" + img + ".jpg");
int i = 0;
while (!arq.exists()) {
arq = new File(temp + "/" + img + extensao[i]);
i++;
}
try {
BufferedImage image = ImageIO.read(arq);
//aqui estou colocando os parametros do Jcrop 1 tentativa
BufferedImage new_img = new BufferedImage(w, h,
BufferedImage.TYPE_INT_RGB);
Graphics2D g = new_img.createGraphics();
g.drawImage(image, x, y, w, h, null);
ImageIO.write(new_img, extensao[i].substring(1, extensao[i]
.length()), new File(definitivo));
/*
2ª tentativa
File fileToCreate = new File(definitivo, img + extensao);
FileOutputStream fileOutStream = new FileOutputStream(fileToCreate);
fileOutStream.write(image.hashCode());
fileOutStream.flush();
fileOutStream.close();
*/
} catch (Exception e) {
System.err.println(e);
System.out.println(e);
}
return null;
}
}
na primeira tentativa ele da erro de acesso.
java.io.FileNotFoundException: C:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\IU\fotosUsers (Acesso negado)
na segunda ele grava o arquivo porem sem extensão … eu nao sei o que esta acontecendo …
Olhem como ele grava, sendo que “55MKE07071951GAA” é o nome da imagem
55MKE07071951GAA[Ljava.lang.String;@13abf3d
Alguem pode me ajudar??
Abs