जावास्क्रिप्ट के साथ अपलोड करने से पहले छवि की चौड़ाई और ऊंचाई की जांच करें


122

मेरे पास एक फॉर्म के साथ एक जेपीएस है जिसमें एक उपयोगकर्ता एक छवि डाल सकता है:

<div class="photo">
    <div>Photo (max 240x240 and 100 kb):</div>
    <input type="file" name="photo" id="photoInput" onchange="checkPhoto(this)"/>
</div>

मैंने यह js लिखा है:

function checkPhoto(target) {
    if(target.files[0].type.indexOf("image") == -1) {
        document.getElementById("photoLabel").innerHTML = "File not supported";
        return false;
    }
    if(target.files[0].size > 102400) {
        document.getElementById("photoLabel").innerHTML = "Image too big (max 100kb)";
        return false;
    }
    document.getElementById("photoLabel").innerHTML = "";
    return true;
}

जो फ़ाइल प्रकार और आकार की जाँच करने के लिए ठीक काम करता है। अब मैं छवि की चौड़ाई और ऊँचाई जाँचना चाहता हूँ लेकिन मैं ऐसा नहीं कर सकता।
मैंने कोशिश की है target.files[0].widthलेकिन मुझे मिल गया है undefined। अन्य तरीकों से मुझे मिलता है 0
कोई सुझाव?

जवाबों:


221

फाइल सिर्फ एक फाइल है, आपको एक इमेज बनाने की जरूरत है जैसे:

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;
    }
});

डेमो: http://jsfiddle.net/4N6D9/1/

मुझे लगता है कि आपको लगता है कि यह केवल कुछ ब्राउज़रों में समर्थित है। ज्यादातर फ़ायरफ़ॉक्स और क्रोम, ओपेरा के साथ-साथ अब तक हो सकते हैं।

PS URL.createObjectURL () विधि को MediaStream इंटरफ़ेस से हटा दिया गया है। इस पद्धति को 2013 में पदावनत किया गया है और HTMLMediaElement.srcObject पर धाराएँ प्रदान करके इसे अधिगृहीत किया गया है। पुरानी पद्धति को हटा दिया गया क्योंकि यह कम सुरक्षित है, स्ट्रीम को समाप्त करने के लिए URL.revokeOjbectURL () को कॉल की आवश्यकता होती है। अन्य उपयोगकर्ता एजेंटों ने इस सुविधा को या तो हटा दिया (फ़ायरफ़ॉक्स) या हटा दिया (सफारी)।

अधिक जानकारी के लिए, कृपया यहाँ देखें ।


1
निश्चित रूप से यह सफारी पर काम नहीं करेगा जब तक कि आपके पास सफारी 6.0 नहीं है। 6.0 एकमात्र संस्करण है जो अब तक फ़ाइल API का समर्थन करता है। और मुझे नहीं लगता कि Apple कभी भी विंडोज़ के लिए 6.0 रिलीज होने वाला है। 5.1.7 बहुत पहले
सू

यह IE10 में काम करता है, लेकिन IE9 और उसके नीचे काम नहीं करता है। और ऐसा इसलिए है क्योंकि IE9 और नीचे फ़ाइल API ( caniuse.com/#search=file%20api ) का समर्थन नहीं करते हैं
माइकल यगूदेव

28

मेरे विचार में आपके लिए आवश्यक सही उत्तर है

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;
};

18

मैं सहमत हूँ। एक बार जब यह कहीं उपयोगकर्ता के ब्राउज़र तक पहुँच जाता है तो अपलोड किया जाता है तो आकार प्राप्त करना बहुत आसान है। जैसा कि आपको उस छवि को लोड करने के लिए प्रतीक्षा करने की आवश्यकता है जिसके लिए आप 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";

7

आकार की जांच करने का यह सबसे आसान तरीका है

let img = new Image()
img.src = window.URL.createObjectURL(event.target.files[0])
img.onload = () => {
   alert(img.width + " " + img.height);
}

विशिष्ट आकार के लिए जाँच करें। उदाहरण के रूप में 100 x 100 का उपयोग करना

let img = new Image()
img.src = window.URL.createObjectURL(event.target.files[0])
img.onload = () => {
   if(img.width === 100 && img.height === 100){
        alert(`Nice, image is the right size. It can be uploaded`)
        // upload logic here
        } else {
        alert(`Sorry, this image doesn't look like the size we wanted. It's 
   ${img.width} x ${img.height} but we require 100 x 100 size image.`);
   }                
}

2

फ़ंक्शन वैलिडेटिम (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;
        }
    }

1
कृपया पूरा कोड प्रारूपित करने का प्रयास करें और अपने कोड में आपने जो किया है उसका थोड़ा विवरण दें।
जीशान आदिल

2

इनपुट प्रकार फ़ाइल / के onchange विधि करने के लिए समारोह संलग्न onchange = "validateimg (यह)" /

   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;
        }
    }


-1
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.");
        }

    }

ढेर अतिप्रवाह में आपका स्वागत है! कृपया स्रोत कोड के साथ जवाब न दें। आपका समाधान कैसे काम करता है, इसके बारे में अच्छा विवरण देने का प्रयास करें। देखें: मैं एक अच्छा जवाब कैसे लिखूं? । धन्यवाद
sɐunıɔ ןɐ qɐp
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.