Javascript изменяет размер изображения при выборе файла и загружает новое изображение вместо оригинального - PullRequest
0 голосов
/ 01 марта 2019

Я пытаюсь изменить размер загруженного изображения, а затем загрузить новое изображение.Мой код выполняется без ошибок, и я мог видеть, что изображение было успешно изменено, но каким-то образом исходное изображение загружается вместо вновь созданного изображения.

Я предполагаю, что e.target.files [0] = newimg;неправильный способ изменить загруженный файл изображения на новый файл изображения.Какой должен быть правильный путь?

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript">

            function ResizeImg(e)
            {
                const file = e.target.files[0];
                const fileName = file.name;
                const reader = new FileReader();
                reader.readAsDataURL(e.target.files[0]);
                reader.onload = event => 
                {
                    const img = new Image();
                    img.src = event.target.result;
                    img.onload = () => 
                    {
                        const elem = document.createElement('canvas');
                        const ctx = elem.getContext('2d');

                        const maxWidth = 50;
                        const maxHeight = 50;

                        const ratio = Math.min(maxWidth / img.width, maxHeight / img.height);
                        const width = img.width * ratio + .5 | 0;
                        const height = img.height * ratio + .5 | 0;

                        elem.width = width;
                        elem.height = height;

                        ctx.drawImage(img, 0, 0, width, height);
                        ctx.canvas.toBlob((blob) => 
                        {
                            const newimg = new File([blob], fileName, file);
                            e.target.files[0] = newimg;
                        });
                    }
                };
            }

    </script>
    </head>

  <body>
        <form action="upload.php" method="post" enctype="multipart/form-data">
            <input name="infile" type="file" onchange="ResizeImg(this)">
            <br><br><input type="submit" name="submit">
        </form> 
  </body>   

</html>

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

Нашел ответ на введите описание ссылки здесь .Список входных файлов может быть изменен с помощью fileInput.files = fileList

0 голосов
/ 01 марта 2019

Вы делаете это технически правильно, НО файлы из ввода только для чтения .Так что браузер не позволит вам изменить эти файлы.Что вы можете сделать, это создать новые данные формы, добавить в них все новые изображения и отправить их с помощью функции fetch, чтобы отправить их асинхронно без обновления страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...