Xác định kích thước ban đầu của trình duyệt chéo hình ảnh?


90

Có cách nào đáng tin cậy, độc lập với khung để xác định kích thước vật lý của một <img src='xyz.jpg'>thay đổi kích thước ở phía máy khách không?


img.onload = function () {console.log(img.height, img.width)}
neaumusic

Câu trả lời:


130

Bạn có 2 lựa chọn:

Lựa chọn 1:

Tháo widthheightcác thuộc tính và đọc offsetWidthoffsetHeight

Lựa chọn 2:

Tạo một Imageđối tượng JavaScript , đặt srcvà đọc widthheight(bạn thậm chí không cần phải thêm nó vào trang để thực hiện việc này).

function getImgSize(imgSrc) {
    var newImg = new Image();

    newImg.onload = function() {
      var height = newImg.height;
      var width = newImg.width;
      alert ('The image size is '+width+'*'+height);
    }

    newImg.src = imgSrc; // this must be done AFTER setting onload
}

Chỉnh sửa bởi Pekka : Như đã đồng ý trong các ý kiến, tôi đã thay đổi chức năng để chạy trên sự kiện ´onload´ của hình ảnh. Nếu không, với hình ảnh lớn heightwidthsẽ không trả về bất cứ thứ gì vì hình ảnh chưa được tải.


Điều đó sẽ không hoạt động với các hình ảnh chưa được tải. Có thể đáng để điều chỉnh nó để hoạt động bình thường đối với những người khác tình cờ gặp câu trả lời này.
James

11
@Gabriel, tôi đang sử dụng cái này nhưng có newImg.onloadchức năng đảm bảo hình ảnh được tải khi tôi đặt chiều rộng / chiều cao. Bạn có đồng ý với tôi chỉnh sửa câu trả lời của bạn cho phù hợp không?
Pekka

2
Chỉ cần lưu ý nhỏ: Chrome / OSX có thể gặp sự cố với hình ảnh được lưu trong bộ nhớ cache trong đó bạn lấy 0 làm chiều cao / chiều rộng bằng cách sử dụng kỹ thuật này.
David Hellsing

2
Làm thế nào để tôi nhận được trả về chiều cao và chiều rộng ... ?? bởi vì những biến không nhận được bên ngoài của onload
jack

5
@GabrielMcAdams, nếu bạn thêm if(newImg.complete || newImg.readyState === 4) newImg.onload();vào cuối chức năng của mình, nó sẽ khắc phục sự cố trên Chrome / OSX khiến onload không kích hoạt khi hình ảnh được tải từ bộ nhớ cache.
Prestaul

101

Hình ảnh (ít nhất là trên Firefox) có thuộc tính a naturalWidth/ height để bạn có thể sử dụng img.naturalWidthđể lấy chiều rộng ban đầu

var img = document.getElementsByTagName("img")[0];
img.onload=function(){
    console.log("Width",img.naturalWidth);
    console.log("Height",img.naturalHeight);
}

Nguồn


8
Hoạt động trên Chrome quá
bcoughlan

4
Chủ đề này là vẫn có liên quan trong năm 2013. Dưới đây là một liên kết với một workaround tuyệt vời cho IE7 / 8: jacklmoore.com/notes/naturalwidth-and-naturalheight-in-ie
BurninLeo

4
Đây là câu trả lời chiến thắng trong năm 2018. Hoạt động ở mọi nơi. (Mỗi trình duyệt bảng tương thích tại MDN.)
7vujy0f0hy

3

Bạn có thể tải trước hình ảnh vào đối tượng Hình ảnh javascript, sau đó kiểm tra các thuộc tính chiều rộng và chiều cao trên đối tượng đó.


Tất nhiên - tôi không cần phải đưa nó vào tài liệu. Sẽ làm theo cách đó, chúc mừng!
Pekka

3
/* Function to return the DOM object's in crossbrowser style */
function widthCrossBrowser(element) {
    /* element - DOM element */

    /* For FireFox & IE */
    if(     element.width != undefined && element.width != '' && element.width != 0){
        this.width  =   element.width;
    }
    /* For FireFox & IE */
    else if(element.clientWidth != undefined && element.clientWidth != '' && element.clientWidth != 0){
        this.width  =   element.clientWidth;
    }
    /* For Chrome * FireFox */
    else if(element.naturalWidth != undefined && element.naturalWidth != '' && element.naturalWidth != 0){
        this.width  =   element.naturalWidth;
    }
    /* For FireFox & IE */
    else if(element.offsetWidth != undefined && element.offsetWidth != '' && element.offsetWidth != 0){
        this.width  =   element.offsetWidth;
    }       
        /*
            console.info(' widthWidth width:',      element.width);
            console.info(' clntWidth clientWidth:', element.clientWidth);
            console.info(' natWidth naturalWidth:', element.naturalWidth);
            console.info(' offstWidth offsetWidth:',element.offsetWidth);       
            console.info(' parseInt(this.width):',parseInt(this.width));
        */
    return parseInt(this.width);

}   

var elementWidth    = widthCrossBrowser(element);

elementmột lựa chọn jQuery? Chiều cao là gì?
Istiaque Ahmed

2

Chỉ cần thay đổi một chút tùy chọn thứ hai của Gabriel, để dễ sử dụng hơn:

function getImgSize(imgSrc, callback) {
    var newImg = new Image();

    newImg.onload = function () {
        if (callback != undefined)
            callback({width: newImg.width, height: newImg.height})
    }

    newImg.src = imgSrc;
}

Html:

<img id="_temp_circlePic" src="http://localhost/myimage.png" 
style="width: 100%; height:100%">

Cuộc gọi mẫu:

getImgSize($("#_temp_circlePic").attr("src"), function (imgSize) {
    // do what you want with the image's size.
    var ratio = imgSize.height / $("#_temp_circlePic").height();
});
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.