Check image width and height before upload with Javascript

前端 未结 8 753
情歌与酒
情歌与酒 2020-11-22 14:53

I have a JPS with a form in which a user can put an image:

Photo (max 240x240 and 100 kb):
相关标签:
8条回答
  • 2020-11-22 15:35

    The file is just a file, you need to create an image like so:

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

    Demo: http://jsfiddle.net/4N6D9/1/

    I take it you realize this is only supported in a few browsers. Mostly firefox and chrome, could be opera as well by now.

    P.S. The URL.createObjectURL() method has been removed from the MediaStream interface. This method has been deprecated in 2013 and superseded by assigning streams to HTMLMediaElement.srcObject. The old method was removed because it is less safe, requiring a call to URL.revokeOjbectURL() to end the stream. Other user agents have either deprecated (Firefox) or removed (Safari) this feature feature.

    For more information, please refer here.

    0 讨论(0)
  • 2020-11-22 15:37

    Attach the function to the onchange method of the input type file /onchange="validateimg(this)"/

       function validateimg(ctrl) { 
            var fileUpload = ctrl;
            var regex = new RegExp("([a-zA-Z0-9\s_\\.\-:])+(.jpg|.png|.gif)$");
            if (regex.test(fileUpload.value.toLowerCase())) {
                if (typeof (fileUpload.files) != "undefined") {
                    var reader = new FileReader();
                    reader.readAsDataURL(fileUpload.files[0]);
                    reader.onload = function (e) {
                        var image = new Image();
                        image.src = e.target.result;
                        image.onload = function () {
                            var height = this.height;
                            var width = this.width;
                            if (height < 1100 || width < 750) {
                                alert("At least you can upload a 1100*750 photo size.");
                                return false;
                            }else{
                                alert("Uploaded image has valid Height and Width.");
                                return true;
                            }
                        };
                    }
                } else {
                    alert("This browser does not support HTML5.");
                    return false;
                }
            } else {
                alert("Please select a valid Image file.");
                return false;
            }
        }
    
    0 讨论(0)
  • 2020-11-22 15:38

    I agree. Once it is uploaded to somewhere the user's browser can access then it is pretty easy to get the size. As you need to wait for the image to load you'll want to hook into the onload event for 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";
    
    0 讨论(0)
  • 2020-11-22 15:39

    In my view the perfect answer you must required is

    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;
    };
    
    0 讨论(0)
  • 2020-11-22 15:41
    function uploadfile(ctrl) {
        var validate = validateimg(ctrl);
    
        if (validate) {
            if (window.FormData !== undefined) {
                ShowLoading();
                var fileUpload = $(ctrl).get(0);
                var files = fileUpload.files;
    
    
                var fileData = new FormData();
    
    
                for (var i = 0; i < files.length; i++) {
                    fileData.append(files[i].name, files[i]);
                }
    
    
                fileData.append('username', 'Wishes');
    
                $.ajax({
                    url: 'UploadWishesFiles',
                    type: "POST",
                    contentType: false,
                    processData: false,
                    data: fileData,
                    success: function(result) {
                        var id = $(ctrl).attr('id');
                        $('#' + id.replace('txt', 'hdn')).val(result);
    
                        $('#imgPictureEn').attr('src', '../Data/Wishes/' + result).show();
    
                        HideLoading();
                    },
                    error: function(err) {
                        alert(err.statusText);
                        HideLoading();
                    }
                });
            } else {
                alert("FormData is not supported.");
            }
    
        }
    
    0 讨论(0)
  • 2020-11-22 15:47

    function validateimg(ctrl) {

            var fileUpload = $("#txtPostImg")[0];
    
    
            var regex = new RegExp("([a-zA-Z0-9\s_\\.\-:])+(.jpg|.png|.gif)$");
            if (regex.test(fileUpload.value.toLowerCase())) {
    
                if (typeof (fileUpload.files) != "undefined") {
    
                    var reader = new FileReader();
    
                    reader.readAsDataURL(fileUpload.files[0]);
                    reader.onload = function (e) {
    
                        var image = new Image();
    
                        image.src = e.target.result;
                        image.onload = function () {
    
                            var height = this.height;
                            var width = this.width;
                            console.log(this);
                            if ((height >= 1024 || height <= 1100) && (width >= 750 || width <= 800)) {
                                alert("Height and Width must not exceed 1100*800.");
                                return false;
                            }
                            alert("Uploaded image has valid Height and Width.");
                            return true;
                        };
                    }
                } else {
                    alert("This browser does not support HTML5.");
                    return false;
                }
            } else {
                alert("Please select a valid Image file.");
                return false;
            }
        }
    
    0 讨论(0)
提交回复
热议问题