Как установить требуемую ширину и высоту загруженной фотографии с использованием файла типа ввода [дубликат]

Потеря обработчиков событий, IMO, ошибка в том, как Javascript обрабатывает DOM. Чтобы избежать такого поведения, вы можете добавить следующее:

function start () {
  myspan = document.getElementById("myspan");
  myspan.onclick = function() { alert ("hi"); };

  mydiv = document.getElementById("mydiv");
  clickHandler = mydiv.onclick;  // add
  mydiv.innerHTML += "bar";
  mydiv.onclick = clickHandler;  // add
}
87
задан SandroMarques 9 July 2016 в 10:49
поделиться

5 ответов

Файл - это просто файл, вам нужно создать изображение следующим образом:

var _URL = window.URL || window.webkitURL;
$("#file").change(function (e) {
    var file, img;
    if ((file = this.files[0])) {
        img = new Image();
        img.onload = function () {
            alert(this.width + " " + this.height);
        };
        img.src = _URL.createObjectURL(file);
    }
});

Демо: http://jsfiddle.net/4N6D9/1/

Полагаю, вы понимаете, что это поддерживается только в нескольких браузерах. В большинстве случаев firefox и chrome также могут быть операми.

173
ответ дан Esailija 19 August 2018 в 03:06
поделиться
  • 1
    Спасибо, спасибо. – Simon 18 January 2012 в 12:46
  • 2
    не работает в Safari Версия 5.1.7 – Diffy 6 September 2012 в 07:17
  • 3
    определенно он не будет работать на сафари, если у вас нет сафари 6.0. 6.0 - единственная версия, поддерживающая API файлов. И я не думаю, что Apple выпустит 6.0 для Windows. 5.1.7 были последними verson сафари от soooo давно – Seho Lee 28 November 2012 в 13:59
  • 4
    Это работает в iE? – rafa.ferreira 19 July 2013 в 18:36
  • 5
    Он работает в IE10, но, похоже, не работает в IE9 и ниже. И это потому, что IE9 и ниже не поддерживают File API ( caniuse.com/#search=file%20api ) – Michael Yagudaev 19 September 2013 в 00:24

На мой взгляд, идеальным ответом вам должно быть

 var reader = new FileReader();
    //Read the contents of Image File.
    reader.readAsDataURL(fileUpload.files[0]);
    reader.onload = function (e) {
    //Initiate the JavaScript Image object.
    var image = new Image();

    //Set the Base64 string return from FileReader as source.
                       image.src = e.target.result;

                        //Validate the File Height and Width.
                        image.onload = function () {
                            var height = this.height;
                            var width = this.width;
                            if (height > 100 || width > 100) {
                                alert("Height and Width must not exceed 100px.");
                                return false;
                            }
                            alert("Uploaded image has valid Height and Width.");
                            return true;
                        };

                    }
7
ответ дан ash das 19 August 2018 в 03:06
поделиться

Согласен. После того, как он будет загружен в браузер пользователя, доступ к нему будет довольно простым. Поскольку вам нужно дождаться загрузки изображения, вам нужно подключиться к событию onload для img.

var width, height;

var img = document.createElement("img");
img.onload = function() {
    // `naturalWidth`/`naturalHeight` aren't supported on <IE9. Fallback to normal width/height
    // The natural size is the actual image size regardless of rendering.
    // The 'normal' width/height are for the **rendered** size.

    width  = img.naturalWidth  || img.width;
    height = img.naturalHeight || img.height; 

    // Do something with the width and height
}

// Setting the source makes it start downloading and eventually call `onload`
img.src = "http://your.website.com/userUploadedImage.jpg";
14
ответ дан pseudosavant 19 August 2018 в 03:06
поделиться
  • 1
    Есть ошибка - она ​​должна быть img.naturalHeight не только naturalHeight. К сожалению, я не могу редактировать, потому что он говорит, что для редактирования должно быть не менее 6 символов. – Džuris 21 August 2016 в 00:29
  • 2
    Спасибо @ Juris. Я починил это. – pseudosavant 21 August 2016 в 23:37
0
ответ дан Shahbaz Raees2 30 October 2018 в 14:49
поделиться
0
ответ дан TJBlackman 30 October 2018 в 14:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: