J'ai trouvé quelques articles différents et même des questions sur stackoverflow répondant à cette question. J'implémente fondamentalement la même chose que ce post .
Voici donc mon problème. Lorsque je télécharge la photo, je dois également soumettre le reste du formulaire. Voici mon 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>
Auparavant, je n'avais pas besoin de redimensionner l'image, donc mon javascript ressemblait à ceci:
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...
}
}
});
};
Tout cela a très bien fonctionné ... maintenant que j'ai besoin de redimensionner les images ... comment puis-je remplacer l'image dans le formulaire afin que l'image redimensionnée soit publiée et non l'image téléchargée?
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...
}
}
});
};
J'ai pensé à déplacer l'entrée de fichier hors du formulaire et à avoir une entrée masquée sous la forme dont j'ai défini la valeur sur la valeur de l'image redimensionnée ... Mais je me demande si je peux simplement remplacer l'image qui est déjà sous la forme.
BufferedImage dest = src.getSubimage(rect.x, rect.y, rect.width, rect.height);