Следующий код (вдохновленный основным ответом HTML5 Предварительное изменение размера изображений перед загрузкой ) берет выбранный файл изображения из <input type="file">
, повторно сжимает его в JPG с качеством 50% в переменную dataurl
.
Вопрос: Как заменить содержимое <input type="file">
этим вновь сжатым файлом? Так что при отправке <form>
это этот новый файл, который будет отправлен?
Примечание: я не хочу использовать AJAX для загрузки, но стандартный POST <form>
. «Размещенный» файл должен быть dataurl
, то есть он должен быть таким, как если бы файл, выбранный пользователем в <input type="file">
, был файлом, сгенерированным dataurl
.
function doit() {
var input = document.getElementById('file'),
canvas = document.getElementById('canvas');
var file = input.files[0];
var img = document.createElement("img");
var reader = new FileReader();
reader.onload = function(e) { img.src = e.target.result }
reader.readAsDataURL(file);
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0);
var dataurl = canvas.toDataURL("image/jpeg", 0.5);
console.log(dataurl);
}
<form action="/upload" method="post">
<input type="file" onchange="doit();" id="file" /><br><br>
<input type="submit" />
</form>
<canvas id="canvas" style="display: none" />