Saya telah menemukan beberapa posting berbeda dan bahkan pertanyaan tentang stackoverflow menjawab pertanyaan ini. Saya pada dasarnya menerapkan hal yang sama seperti posting ini .
Jadi inilah masalah saya. Saat saya mengupload foto, saya juga harus menyerahkan formulir lainnya. Ini html saya:
<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>
Sebelumnya, saya tidak perlu mengubah ukuran gambar, jadi javascript saya terlihat seperti ini:
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...
}
}
});
};
Ini semua bekerja dengan baik ... sekarang saya perlu mengubah ukuran gambar ... bagaimana saya bisa mengganti gambar di formulir sehingga yang diubah ukurannya diposting dan bukan gambar yang diunggah?
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...
}
}
});
};
Saya telah berpikir untuk memindahkan input file keluar dari formulir dan memiliki input tersembunyi dalam bentuk yang saya setel nilainya ke nilai gambar yang diubah ukurannya ... Tapi saya bertanya-tanya apakah saya bisa mengganti gambar itu sudah dalam bentuk.
BufferedImage dest = src.getSubimage(rect.x, rect.y, rect.width, rect.height);