He encontrado algunas publicaciones diferentes e incluso preguntas en stackoverflow que responden a esta pregunta. Básicamente estoy implementando lo mismo que esta publicación .
Así que aquí está mi problema. Cuando subo la foto, también necesito enviar el resto del formulario. Aquí está mi html:
<form id="uploadImageForm" enctype="multipart/form-data">
<input name="imagefile[]" type="file" id="takePictureField" accept="image/*" onchange="uploadPhotos(\'#{imageUploadUrl}\')" />
<input id="name" value="#{name}" />
... a few more inputs ...
</form>
Anteriormente, no necesitaba cambiar el tamaño de la imagen, por lo que mi javascript se veía así:
window.uploadPhotos = function(url){
var data = new FormData($("form[id*='uploadImageForm']")[0]);
$.ajax({
url: url,
data: data,
cache: false,
contentType: false,
processData: false,
type: 'POST',
success: function(data){
... handle error...
}
}
});
};
Todo esto funcionó muy bien ... ahora que necesito cambiar el tamaño de las imágenes ... ¿cómo puedo reemplazar la imagen en el formulario para que se publique la imagen redimensionada y no la imagen cargada?
window.uploadPhotos = function(url){
var resizedImage;
// Read in file
var file = event.target.files[0];
// Ensure it's an image
if(file.type.match(/image.*/)) {
console.log('An image has been loaded');
// Load the image
var reader = new FileReader();
reader.onload = function (readerEvent) {
var image = new Image();
image.onload = function (imageEvent) {
// Resize the image
var canvas = document.createElement('canvas'),
max_size = 1200,
width = image.width,
height = image.height;
if (width > height) {
if (width > max_size) {
height *= max_size / width;
width = max_size;
}
} else {
if (height > max_size) {
width *= max_size / height;
height = max_size;
}
}
canvas.width = width;
canvas.height = height;
canvas.getContext('2d').drawImage(image, 0, 0, width, height);
resizedImage = canvas.toDataURL('image/jpeg');
}
image.src = readerEvent.target.result;
}
reader.readAsDataURL(file);
}
// TODO: Need some logic here to switch out which photo is being posted...
var data = new FormData($("form[id*='uploadImageForm']")[0]);
$.ajax({
url: url,
data: data,
cache: false,
contentType: false,
processData: false,
type: 'POST',
success: function(data){
... handle error...
}
}
});
};
He pensado en mover la entrada del archivo fuera del formulario y tener una entrada oculta en el formulario en la que configuré el valor del valor de la imagen redimensionada ... Pero me pregunto si puedo reemplazar la imagen que ya está en el formulario.
BufferedImage dest = src.getSubimage(rect.x, rect.y, rect.width, rect.height);