Tôi đã tìm thấy một vài bài đăng khác nhau và thậm chí cả câu hỏi trên stackoverflow trả lời câu hỏi này. Về cơ bản tôi đang thực hiện điều này giống như bài đăng này .
Vì vậy, đây là vấn đề của tôi. Khi tải ảnh lên, tôi cũng cần gửi phần còn lại của biểu mẫu. Đây là html của tôi:
<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>
Trước đây, tôi không cần thay đổi kích thước hình ảnh, vì vậy javascript của tôi trông như thế này:
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...
}
}
});
};
Tất cả điều này đều hoạt động tốt ... bây giờ tôi cần thay đổi kích thước hình ảnh ... làm thế nào tôi có thể thay thế hình ảnh trong biểu mẫu để hình ảnh đã thay đổi kích thước được đăng chứ không phải hình ảnh được tải lên?
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...
}
}
});
};
Tôi đã nghĩ đến việc di chuyển đầu vào tệp ra khỏi biểu mẫu và có một đầu vào ẩn trong biểu mẫu mà tôi đặt giá trị thành giá trị của hình ảnh đã thay đổi kích thước ... Nhưng tôi tự hỏi liệu tôi có thể thay thế hình ảnh đó không đã có trong biểu mẫu.
BufferedImage dest = src.getSubimage(rect.x, rect.y, rect.width, rect.height);