Ich habe ein paar verschiedene Beiträge und sogar Fragen zum Stackoverflow gefunden, die diese Frage beantworten. Ich implementiere im Grunde das Gleiche wie dieser Beitrag .
Also hier ist mein Problem. Wenn ich das Foto hochlade, muss ich auch den Rest des Formulars einreichen. Hier ist mein 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>
Zuvor musste ich die Größe des Bildes nicht ändern, daher sah mein Javascript folgendermaßen aus:
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...
}
}
});
};
Das alles hat super funktioniert ... jetzt, wo ich die Größe der Bilder ändern muss ... wie kann ich das Bild im Formular ersetzen, damit das Bild in der Größe veröffentlicht wird und nicht das hochgeladene Bild?
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...
}
}
});
};
Ich habe darüber nachgedacht, die Dateieingabe aus dem Formular zu verschieben und eine versteckte Eingabe in dem Formular zu haben, für die ich den Wert auf den Wert des verkleinerten Bilds festgelegt habe ... Aber ich frage mich, ob ich das Bild einfach ersetzen kann ist schon in der Form.
BufferedImage dest = src.getSubimage(rect.x, rect.y, rect.width, rect.height);